SELECT:
重要组件:Query Cache
查询执行路径中的组件: 查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎
SELECT语句的执行流程:
FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause --> ORDER BY --> SELECT -->LIMIT
单表查询:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
mysql>SHOW GLOBAL VARIABLE LIKE 'query%';
其中DISTINCT:数据去重
SQL_CACHE:显示指定存储查询结果于缓存之中
SQL_NO_CACHE:显示查询结果不予缓存
query_cache_type的值为ON时,查询缓存功能打开
SELECT的结果符合缓存条件即会缓存,否则,不予缓存
显示指定SQL_NO_CACHE,不予缓存
query_cache_type的值为‘’DEMAND'时,查询缓存功能按需进行;
显示指定SQL_CACHE的SELECT语句才会缓存;其他均不予缓存
怎么查询缓存命中率:查询命中次数/总查询数
mysql>SHOW GLOBAL STATUS LOKE 'Qcache%';
mysql> SHOW GLOBAL STATUS LIKE 'Com_se%'
字段显示可以使用别名:
SELECT name AS stuname FROM students;
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: 读锁,共享锁
多表查询