mysql索引使用
21322019-08-23 16:49:00返回列表
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
InnoDB和MyISAM存储引擎支持BTREE索引,MEMORY存储引擎支持HASH索引和BTREE索引,默认为前者。
索引有其明显的优势,也有其不可避免的缺点。
索引的优点
(1)可以提高检索数据的速度,这是创建索引的最主要的原因;
(2)对于有依赖关系的子表和父表之间的联合查询时,可以提高查询速度;
(3)使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。
索引的缺点
(1)创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;
(2)索引需要占用物理空间,每一个索引要占一定的物理空间;
(3)增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了 。
因此,选择使用索引时,需要综合考虑索引的优点和缺点。
技巧:索引可以提高查询的速度,但是会影响插入记录的速度。因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序。这样就降低了插入记录的速度,插入大量记录时的速度影响更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据。插入完成后,再创建索引。
总结:
①最佳左前缀法则。
#1.在等值查询时,更改索引列顺序,并不会影响explain的执行结果,因为mysql底层会进行优化。
#2.在使用order by时,注意索引顺序、常量,以及可能会导致Using filesort的情况。
②group by容易产生Using temporary。
③通俗理解口诀:
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
LIKE百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用。