索引虽然是sql性能优化的利器,但索引的维护是需要成本的,创建索引,需要注意以下几点
1.索引应该建在查询应用频繁的极端,比如where判断 order排序 join(on)字段上创建索引
2.索引的个数应该适量,索引占用空间
3.区分度低的字段,比如性别,不需要建索引
4.频繁更新的值,不要作为索引,还未导致页分裂,io次数增多
5.联合索引把散列性高的值放在了前面为了满足最左前缀匹配原则
6.尽可能用联合索引代替多个单列索引
7.不建议用无序的值建索引,会导致页分裂
最左前缀匹配原则是 MySQL 中用于 B-Tree 索引(尤其是 InnoDB 存储引擎)的一种重要的查询优化机制。这个原则也适用于大多数使用 B-Tree 索引的关系型数据库系统。最左前缀匹配原则指的是,在使用复合索引(包含多个列的索引)进行查询时,数据库能够使用索引的条件取决于查询条件中涉及的列是否与索引中的列从最左边开始严格匹配。
复合索引类似于电话簿的排序:首先按照姓氏排序,然后是名字,最后是电话号码。如果你想找到所有姓氏为 "Smith" 的人,你可以很容易地找到那一节;但如果你想找到所有名字为 "John" 的人,而不考虑姓氏,电话簿的排序就帮不上忙了。
在索引
(A, B, C)
的情况下:
- 查询条件包含
A
列,数据库可以利用索引。- 查询条件包含
A
和B
列,数据库可以更有效地利用索引。- 查询条件包含
A
、B
和C
列,数据库可以最有效地利用索引。- 查询条件仅包含
B
或C
列,而没有A
列,索引就不会被使用(或者使用不完全)。简而言之,最左前缀匹配原则意味着对于复合索引,查询条件需要从索引的最左边的列开始,并且不能跳过任何列。
这个原则的理解对于如何设计有效的索引以及如何编写能够充分利用索引的 SQL 查询至关重要。如果不遵循最左前缀匹配原则,数据库查询可能会执行得更慢,因为数据库不能或者不会充分利用可用的索引。