MySQL查询操作

新博客网站1

新博客网站2

一,查询的执行路径

MySQL查询操作_第1张图片
image.png

二,查询路径中的组件

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

三,查询流程

MySQL查询操作_第3张图片
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查询操作)