数据库优化之复合索引不起作用的原因

数据库优化之复合索引不起作用的原因

1,情景描述:最近在做数据统计这一块,有一个功能然后使用起来觉得非常卡,然后就开始找所在原因。
2,查找原因

1,把sql语句打印出来放到mysql工具中执行,发现了有一条语句执行的非常慢,目标锁定此sql
2,查找关于如何优化sql的相关资料,基本上可确定为索引问题
3,查看表字段,表中已设复合索引,但为何复合索引没起到作用
4,后来查资料得知:原来在复合索引中只有最左侧会起到作用

3,解决方案:把该字段放在该复合索引的最左侧,或者另加一个索引。
4,复合索引的建立原则:

1,如果你很可能仅对一个列多次执行搜索,则该列应该是复合索引中的第一列。如果您很可能对一个两列索引中的两个列执行单独的搜索,则应该创建另一个仅包含第二列的索引。
2,包含多个列的主键始终会自动以复合索引的形式创建索引,其列的顺序是它们在表定义中出现的顺序,而不是在主键定义中指定的顺序。在考虑将来通过主键执行的搜索,确定哪一列应该排在最前面。
,3,请注意,创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。在复合索引里包含太多的列不仅不会给带来太多好处。而且由于使用相当多的内存来存储复合索引的列的值,其后果是内存溢出和性能降低。

你可能感兴趣的:(mysql)