zoukankan      html  css  js  c++  java
  • 索引?

    索引包含一个或多个列的值。MySql只能高效的利用索引的最左前缀列。索引的优势:

    • 减少查询扫描的数据量

    • 避免排序和零时表

    • 将随机IO变为顺序IO (顺序IO的效率高于随机IO)

    B-Tree使用最多的索引类型。采用B-Tree数据结构来存储数据(每个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的遍历)。B-Tree索引适用于全键值,键值范围,键前缀查找,支持排序。B-Tree索引限制:

    • 如果不是按照索引的最左列开始查询,则无法使用索引。

    • 不能跳过索引中的列。如果使用第一列和第三列索引,则只能使用第一列索引。

    • 如果查询中有个范围查询,则其右边的所有列都无法使用索引优化查询。

    哈希索引只有精确匹配索引的所有列,查询才有效。存储引擎会对所有的索引列计算一个哈希码,哈希索引将所有的哈希码存储在索引中,并保存指向每个数据行的指针。题精选哈希索引限制:

    • 无法用于排序

    • 不支持部分匹配

    • 只支持等值查询如=,IN(),不支持 < >

    优化建议点

    • 注意每种索引的适用范围和适用限制。

    • 索引的列如果是表达式的一部分或者是函数的参数,则失效。

    • 针对特别长的字符串,可以使用前缀索引,根据索引的选择性选择合适的前缀长度。

    • 使用多列索引的时候,可以通过 AND 和 OR 语法连接。

    • 重复索引没必要,如(A,B)和(A)重复。

    • 索引在where条件查询和group by语法查询的时候特别有效。

    • 将范围查询放在条件查询的最后,防止范围查询导致的右边索引失效的问题。

    • 索引最好不要选择过长的字符串,而且索引列也不宜为null。

  • 相关阅读:
    Build-in Function:abs(),all(),any(),assii(),bin(),issubclass(),bytearray(),isinstance()
    函数及while实例
    提示'HTTP消息不可读'
    python中关于不执行if __name__ == '__main__':测试模块的解决
    python输出测试报告测试成功
    SqlServer——批量插入数据
    网页样式——各种炫酷效果持续更新ing...
    网站部署发布到互联网等整套流程
    如何远程操控别人的电脑?我来教你
    代码生成工具——CodeSmith
  • 原文地址:https://www.cnblogs.com/programb/p/14089689.html
Copyright © 2011-2022 走看看