一,查询的执行路径
image.png二,查询路径中的组件
image.png
- 查询缓存,解析器,预处理器,优化器,查询执行引擎,存储引擎
ps:mysql负载均衡集群,怎么提高mysql缓存利用率;引用第三方公共缓存(需要关闭mysql自带缓存),或者一致性哈希,哈希时sql是key(损害负载均衡效果)
三,查询流程
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;
网友评论