通过实例理解单列索引、多列索引以及最左前缀原则
实例:现在我们想查出满足以下条件的用户ID:
SELECT `uID` FROM people WHERE lname`='liu' AND `fname`Zhiqun' AND `age`=26
因为我们不想扫描整表,故考虑用索引。
单列索引:
将lname列建索引,这样就把范围限制在lname='liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。
由于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。
多列索引:INDEX lname_fname_age (lame,fname,age);为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。
注:在MysqL中执行查询时,只能使用一个索引,如果我们在lname,age上分别建索引,执行查询时,只能使用一个索引,MysqL会选择一个最严格(获得结果集记录数最少)的索引。
最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,age)组合索引。
注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
总结以上是内存溢出为你收集整理的MySQL索引最左原则全部内容,希望文章能够帮你解决MySQL索引最左原则所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)