• 单列索引、多列索引和最左前缀原则


    通过实例理解单列索引、多列索引以及最左前缀原则

    实例:现在我们想查出满足以下条件的用户id:

    mysql>SELECT `uid` FROM people WHERE lname`='Liu' AND `fname`='Zhiqun' AND `age`=26

    因为我们不想扫描整表,故考虑用索引。

    1.单列索引:

      ALTER TABLE people ADD INDEX lname (lname);

      将lname列建索引,这样就把范围限制在lname='Liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。

      由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。

      虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。

    2.多列索引:

      ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age); 为了提高搜索效率,

      我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。

    注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

    3.最左前缀:顾名思义,就是最左优先,

      上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

    注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

  • 相关阅读:
    SPAN和DIV的区别
    利用XMLHTTP无刷新添加数据之Post篇
    在Asp.net中上传大文件的解决方法
    在事务中执行批量复制操作
    Microsoft Visual SourceSafe 使用指南
    恢复只有MDF文件的MS SQL数据库
    配置sql server 2000以允许远程访问
    转: Bill Gates 哈佛大学毕业典礼演讲1
    用于对数据库进行操作的类库经验的总结
    用于对数据库进行操作的类库经验的总结 (二)
  • 原文地址:https://www.cnblogs.com/mracale/p/9227421.html
Copyright © 2020-2023  润新知