mysql索引是占用磁盘空间的,索引越多对空间的占用也就越大,写开销也越大,而对于组合索引,如:index(col1,col2,col3)
相当于建立了3个索引,index(col1)``index(col1,col2)``index(col1,col2,col3)
这样一个索引达到了3个索引的作用,节省了磁盘空间,也降低了写开销。
而对于组合索引,需要重点关注的一点就是 最左原则
最左原则举个简单的例子就是
条键 | 是否走索引 | 说明 |
---|---|---|
where col1=1 | 是 | 因为col1 在创建索引的最左边) |
where col2=2 | 否 | 因为col2 不是最左边的列 |
where col1=1 and col2=2 | 是 | 因为 col1和col2是从左向右排列的 |
对于 where col2=2 这个条键是有可能走索引的 只不过是 index类型的索引。
组合索引 可以理解为 mysql 内部是从最左元素先排序,然后之后的元素在进行排序, 类似于 orderby col1,col2,col3 所以查找时 最左元素肯定是有序的,而跳过最左元素,又是无序的了。
遵循了最左原则,条件顺序就无所谓了,因为mysql优化器会自动找到最有效率的执行顺序
PS 我写的文章真是烂啊
参考文章:
https://segmentfault.com/a/1190000015416513
https://www.zhihu.com/question/36996520
网友评论