美文网首页DevOps
MySQL查询操作

MySQL查询操作

作者: Amliya | 来源:发表于2018-04-25 16:40 被阅读1次

    一,查询的执行路径

    image.png

    二,查询路径中的组件

    1. 查询缓存,解析器,预处理器,优化器,查询执行引擎,存储引擎
      ps:mysql负载均衡集群,怎么提高mysql缓存利用率;引用第三方公共缓存(需要关闭mysql自带缓存),或者一致性哈希,哈希时sql是key(损害负载均衡效果)
    image.png

    三,查询流程

    image.png

    四,常用sql

    distikt 数据去重
    sql_cache 指定指明查询结果缓存 否则 sql_no_cache
    query_cache_type 为ON时,表示查询缓存可用
    当上项为ON时,select符合缓存条件就缓存 为DEMAND 表示按需进行,显示指定SQL_CACHE才缓存
    ps 查看show GLOBAL variables like '%' 查看变量
    WHERE子句:指明过滤条件以实现“选择”的功能:
    过滤条件:布尔型表达式;

                    算术操作符:+, -, *, /, %
                    比较操作符:=, !=, <>, <=>, >, >=, <, <=
    
                        BETWEEN min_num AND max_num
                        IN (element1, element2, ...)
                        IS NULL
                        IS NOT NULL
                        LIKE: 
                            %: 任意长度的任意字符;
                            _:任意单个字符;
                        RLIKE:使用正则表达式
                        REGEXP:匹配字符串可用正则表达式书写模式;
    
                    逻辑操作符:
    
                        NOT
                        AND
                        OR
                        XOR
      GROUP:根据指定的条件把查询结果进行“分组”以用于做“聚合”运算:
                    avg(), max(), min(), count(), sum()
    
                    HAVING: 对分组聚合运算后的结果指定过滤条件;
    
                ORDER BY: 根据指定的字段对查询结果进行排序;
                    升序:ASC
                    降序:DESC
    
                LIMIT [[offset,]row_count]:对查询的结果进行输出行数数量限制;
    
                对查询结果中的数据请求施加“锁”:
                    FOR UPDATE: 写锁,排他锁;
                    LOCK IN SHARE MODE: 读锁,共享锁
    

    五,多表查询:

                交叉连接:笛卡尔乘积;
                内连接:
                    等值连接:让表之间的字段以“等值”建立连接关系;
                    不等值连接
                    自然连接
                    自连接
                外连接:
                    左外连接:
                        FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
                    右外连接
                        FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col
    
            子查询:在查询语句嵌套着查询语句 
                基于某语句的查询结果再次进行的查询
    
                用在WHERE子句中的子查询:
                    (1) 用于比较表达式中的子查询;子查询仅能返回单个值;
                        SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age) FROM students);
                    (2) 用于IN中的子查询:子查询应该单键查询并返回一个或多个值从构成列表;
                        SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM teachers);
                    (3) 用于EXISTS;
    
                用于FROM子句中的子查询;
                    使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause; 
                    示例:
                    SELECT s.aage,s.ClassID FROM (SELECT avg(Age) AS aage,ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID) AS s WHERE s.aage>30;
    
            联合查询:UNION
                SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;
    

    相关文章

      网友评论

        本文标题:MySQL查询操作

        本文链接:https://www.haomeiwen.com/subject/hvrylftx.html