MySQL教程学习之面试题05_MySQL数据库SQL语句优化

教程发布:风哥 教程分类:文章教程, 文章资源 更新日期:2019-03-17 浏览学习:263

一、MySQL中explain出来的各种item的意义
id:每个被独立执行的操作的标志,表示对象被操作的顺序。一般来说, id 值大,先被执行;如果 id 值相同,则顺序从上到下。
select_type:查询中每个 select 子句的类型。
table:名字,被操作的对象名称,通常的表名(或者别名),但是也有其他格式。
partitions:匹配的分区信息。
type:join 类型。
possible_keys:列出可能会用到的索引。
key:实际用到的索引。
key_len:用到的索引键的平均长度,单位为字节。ref:表示本行被操作的对象的参照对象,可能是一个常量用 const 表示,也可能是其他表的
key 指向的对象,比如说驱动表的连接列。
rows:估计每次需要扫描的行数。
filtered:rows*filtered/100 表示该步骤最后得到的行数(估计值)。
extra:重要的补充信息。
二、MySQL中profile的意义以及使用场景
在风哥MySQL教程中讲到了Profile 用来分析 sql 性能的消耗分布情况。当用 explain 无法解决慢 SQL 的时候,需要用profile 来对 sql 进行更细致的分析,找出 sql 所花的时间大部分消耗在哪个部分,确认 sql的性能瓶颈。
三、MySQL explain 中的索引问题
在风哥MySQL学习过程中,我们要知道Explain 结果中,一般来说,要看到尽量用 index(type 为 const、 ref 等, key 列有值),避免使用全表扫描(type 显式为 ALL)。比如说有 where 条件且选择性不错的列,需要建立索引。
被驱动表的连接列,也需要建立索引。被驱动表的连接列也可能会跟 where 条件列一起建立联合索引。当有排序或者 group by 的需求时,也可以考虑建立索引来达到直接排序和汇总的需求。

四、[SELECT *] 和[SELECT 全部字段]的2种写法有何优缺点,至少写出四点
1>.前者要解析数据字典,后者不需要
2>.结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
3>.表字段改名,前者不需要修改,后者需要改
4>.后者可以建立索引进行优化,前者无法优化
5>.后者的可读性比前者要高

五、HAVNG 子句 和 WHERE的异同点,至少写出3点
1>.语法上:where 用表中列名,having用select结果别名
2>.影响结果范围:where从表读出数据的行数,having返回客户端的行数
3>.索引:where 可以使用索引,having不能使用索引,只能在临时结果集操作
4>.where后面不能使用聚集函数,having是专门使用聚集函数的。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】MySQL教程学习之面试题06_讲解MySQL备份策略及mysqldump和xtranbackup原理
【下一篇】MySQL教程学习之面试题04_MySQL数据库cpu占用500%如何处理