创建一个好的索引,需要考虑以下方面:
- 最左匹配原则。这个非常重要,MySQL会一直向右匹配直到遇到范围查询(<、>、between、Like)就停止匹配。
- 尽量选择区分度高的列作为索引。区分度的公式是COUNT(DISTINCT col)、COUNT(*)。表示字段不重复的比例,比率越大扫描的记录数就越少。
- 索引列不能参与计算,尽量保持列“干净”。比如FROM_UNIXTIME(create_time) = ‘2020-02-02’就不能使用索引,原因是B+树中存储的都是数据表中的字段值,但是进行检索时,需要把所有元素都应用函数才能比较,这样的代价太大。所以语句写成:create_time =UNIX_TIMESTAMP(‘2020-02-01’)。
- 尽可能的扩展索引,不要建立新索引。比如已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。单个多列组合索引和多个单列索引的检索查询效果不同,因为执行SQL时,MySQL只能用一个索引,所以会从单列索引中选择一个限制最严格的索引(MYSQL5.0以后有“合并索引”的策略,但是还是应该建立比较好的索引,而不应该依赖于“合并索引”这个策略)