MySQL之SQL优化(2)
MySQL之SQL优化(二)
创建更好的索引
1.覆盖索引,当QEP在Extra列中显示Using index时,不意味访问底层数据库时使用了索引,他代表只有这个索引才是足查询要求的。这种索引可以为大型查询或者频繁执行的查询带来显著的性能提升,称为覆盖索引,故名思义,因为他满足了查询中给定表用到的所有列。要创建一个覆盖索引,他必须包含指定表上包括where子句,order by子句,group by子句(如果有的话)以及select语句中的所有列
* InnoDB中主键值会附加到非主键索引的每一个对应记录后边,因此没有必要在非主键索引中指定主键,即InnoDB引擎中所有非主键索引都隐含主键列
*尽量不在查询中使用select *,而只包含真正需要的列,如此就可以通过创建合适的索引来获取更好的SQL优化
*要经常性的根据查询SQL中select来调整索引
*覆盖索引对于使用很多较小长度的主键和外键约束的大型规范化范式来说是很理想的优化方式
2.局部索引
主要目标是减少索引占用的空间,更小的索引意味着更小的磁盘I/O开销,更快的访问到所需的数据行。尤其
磁盘的索引和数据列远大于系统可用内存时,获取的性能改进会超过一个非唯一的并且拥有低基数的索引带来的影响。
3. explain命令
Explain命令用于Mysql中SQL语句的QEP
例如:
explain [extended | partitions]
select ...
或
explain table_name(等同于desc table_name)
QEP实在SQL/Stored Procedure语句执行时动态计算的