zoukankan      html  css  js  c++  java
  • 数据库索引总结

    高强度训练第十九天总结:

    为什么要用索引

    • 通过创建唯一性索引可以保证数据库表中每一行数据的唯一性
    • 可以大大加快数据的检索速度(大大减少了检索的数据量),这也是创建索引最主要的原因。
    • 帮助服务器避免排序和临时表
    • 将随机IO变为顺序IO
    • 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

    索引这么多优点,为什么不对表中的每一个列创建一个索引呢?

    • 当表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据维护的速度。
    • 索引修啊占物理空间,除了数据表占数据空间之外,每一个索引还需要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
    • 创建索引和维护索引需要耗费时间,这种时间随着数据量的增加而增加。

    索引是如何提高查询速度的?

    • 将无序的数据变成相对有序的数据(就像查目录一样)

    使用索引的注意事项

    • 在经常需要搜索的列上,可以加快搜索的速度
    • 在经常使用where子句的列上面创建索引,加快条件的判断速度。
    • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的时间
    • 对于中到大型表索引都是非常有效的,但是特大型表的话维护开销会很大,不适合建索引
    • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
    • 避免where子句中对字段施加函数,这会造成无法命中索引
    • 在使用InnoDB时使用与业务无关的自增主键为主键,即使用逻辑主键,而不要使用业务主键。
    • 将打算加索引的列设置为NOT NULL,否则将导致引擎放弃使用索引而进行全表扫描
    • 删除长期未使用的索引,不用的索引的存在会造成不必要的性能损耗MySQL5.7可以通过查询sys库中的chema_unused_indexes视图来查询哪些索引从未被使用
    • 在使用limit offset 查询缓慢时,可以借助索引来提高性能。

    MySQL 索引主要使用的俩种数据结构

    • 哈希索引 对于哈希索引来说,底层的数据结构就是hash表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景建议选择BTree索引。
    • BTree索引 Mysql的Btree索引使用的时B树中的B+Tree,但是对于主要的俩种存储索引MyISAM和InnoDB的实现方式是不同的

    MyISAM和InnoDB实现索引方式的区别

    • MyISAM:B+Tree叶结点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Treee搜索算法搜索索引,如果指定的Key存在,则取出其data域值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”

    • InnoDB:其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶结点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据库文件本身就是主索引。被称为聚簇索引。

  • 相关阅读:
    清除缓冲
    iOS 10 开发 相机相关的适配
    UIImagePickerControllerDelegate---ActionSheet---获得设备型号
    4,4s屏幕过渡页处理
    iOS小技巧3
    UIWebView中Html中用JS调用OC方法及OC执行JS代码
    删除本地文件
    NSArray倒序
    tableView和scrollView滚动起冲突
    在UIScrollView的delegate方法判断滚动快慢
  • 原文地址:https://www.cnblogs.com/godoforange/p/11618737.html
Copyright © 2011-2022 走看看