政府网站建设管理约谈会议聚合搜索引擎
\
1.mysql的查询语句执行过程,首先客户端要和服务器端建立连接,建立连接后,对于要查询的语句首先查找查询缓存,如果查询缓存没有该数据,就会去找解析器,但是要注意,如果多次的查询,查询缓存都没有被命中,那这个查询缓存就没有意义了,还还不如关闭,因为缓存也会有开销的.至少要有三层的命中率才考虑开启查询缓存.不过也不一定,假如你有1000条查询,只有10条被查询缓存命中,但是这10条又是相当复杂的,这10条的开销比剩余的990都大,也可以开启.而查询缓存有分为字节命中和
2.如果查询缓存没有命中,就交给解析器,做词法分析,语法分析等,必要的时候解析器会结合预处理器生成解析树,解析树这里可以理解为路径,对于查询的这条语句,有多条路可走.
3.查询优化器会帮忙选择一条最优的路径来作为查询的计划,必要的时候,查询优化器还会修改查询语句,来达到最优查询
4.查询优化语句后,会把最终的语查询执行引擎,但是mysql是多线程的,而查询引擎只有一个,当多个用户同时发起查询时,需要一个查询执行计划来管理排队的问题.
5.查询执行引擎将优化器选择好的查询语句交给存储执引擎,存储引擎再真正的调用数据层层返回给客户端.
6.在返回客户端的时候,查询缓存还必须查看该条查询结果是否有必须缓存在查询缓存中.用户是可以手动指定是否记录某些查询结果的.
MySQL的查询
单表查询:简单查询
投影(挑选要显示的字段):SELECT 字段1,字段2,... FROM tb_name;
SELECT * FROM tb_name;
选择(挑选符合条件的行):SELECT 字段1,字段2,... FROM tb_name WHERE 字句;
SELECT * FROM tb_name WHERE 字句;
WHERE后面跟的是布尔表达式,下面是常见的布尔表达式:
符号 | 作用 |
= | 等于 |
< > aka != | 不等于 |
< = > | 为NULL表达式 |
< | 小于 |
< = | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在什么之间 |
IN | 在给定的范围内 |
IS NULL | 为空 |
IS NOT NULL | 不为空 |
LIKE | 支持通配符 |
RLIKE | 支持正则表达式(性能较低) |
NOT aka ! | 取反 |
AND | 取合 |
OR aka || | 或者 |
现有如下表:
1.查看年龄在37和51之间的学生的姓名
2.年龄段在26,27,28,29之中的学生姓名
3.查找以x开头的学生的姓名
4.查找Tutor为空的学生的姓名
5.查找Tutor不为空的学生的姓名
6.查找年龄大于25岁并且为男性的学生姓名
聚合函数:
SUM(), AVG(), MAX(), MIN(), COUNT()
1.求所有学生的年龄和
2.求所有学生的平均年龄
3.求所有学生中年龄最大的学生
这个错了,看来不能这样查询,Guo Jing的年龄是27
4.求所有学生中年龄最小的学生
5.统计年龄大于25岁的人数
GROUP BY,HACING ,ORDER BY,LIMIT
1.分别求男学生和女学生的年龄总数
2.以班级分组并统计每班人数
3.查看某班人数至少有两个的
4.所有符合条件的行只返回有限的行
5.显示从第二行开始的后三行
联系题:自己回顾的时候做做
SELECT语句的的执行顺序
1.执行SELECT 语句时,先执行FROM语句,来选择需要执行的表
2.然后执行WHERE 语句挑选出符合条件的行
3.如果有GROUP BY做分组的话,则先分组
4.如果分组后需要再次做条件过滤,则执行HAVING
5.如果最后还要做排序的话,则执行ORDER BY
6.以上的执行完了后才会之心个SELECT
7.最后如果有LIMIT的话 还有做LIMIT
去除重复的行
SQL_CACHE:缓存于查询缓存汇总
SQL_NO_CACHE:不缓存查询结果
转载于:https://blog.51cto.com/lidefu/1393044