• 索引相关问题


    密集索引和稀疏索引的区别

      1、密集索引的每个搜索码值都对应一个索引值

      2、稀疏索引只为索引码的某些键建立索引项

    主流mysql数据库引擎对这两索引的选择:

      InnoDB:

      1、如果一个主键被定义了,则改键作为密集索引。

      2、如果没有主键被定义,那么该表的唯一非空索引则作为密集索引。

      3、若不满足以上两点,InnoDB内部隐藏生成6字节的列作为密集索引。

      4、非主键索引存储相关键位和对应主键值,要定位数据必须需要两次查找。

      ISAM:

      主键索引个和辅助索引均为稀疏索引。

    联合索引最左匹配的成因:

      1、mysql会向右匹配直到遇到范围查询(<> between like等)终止。

      2、= 和 in可以乱序,因为mysql的查询优化器会帮我们调整成能够索引识别的形式。

      3、mysl创建复合索引首先会对最左边的索引列进行排序,在对第一个索引字段排序的基础上在对第二个索引列进行排序,第一个字段是绝对有序的,直接用第二个索引字段单独查找是用不到索引的,

    HASH索引弊端: 理论上来说HASH索引的效率要比B+tree的效率要高。

      1、仅仅能满足等于或者IN的查询,不能够使用范围查询。

      2、无法用来避免被排序的操作。

      3、不能利用部分索引键查询。

      4、不能避免表扫描。

      5、遇到大量HASH值相同的数据检索效率并不一定比B+树的检索效率高。

    位图索引弊端:

      目前只有oracle数据库支持位图索引,只仅限有限值的固定的几个值,比如性别,颜色等,但位图索引不适用高并发的OLTP应用,只使用与OLAP应用,当数据发生删除,修改则需要锁定所有的行以防读错数据。

    结论:

      HASH索引和位图索引由于自身避免并没有被广泛应用,与之相反的B+tree能很好的解决以上缺点,因此现在数据库是主流索引都是B+tree。

  • 相关阅读:
    什么时候用resultMap,什么时候用resultType?
    Cannot create PoolableConnectionFactory解决思路
    去除list集合中重复项的几种方法-转载
    ORA-02298 定位问题
    命令行退出MySQL和登录MySQL
    CX4-480服务器数据恢复过程(服务器数据恢复通用方法)
    也谈腾讯云的静默损坏
    raid5阵列两块硬盘离线怎么解决
    服务器卷删除初检报告/数据恢复成功率分析
    服务器两块硬盘离线如何恢复数据
  • 原文地址:https://www.cnblogs.com/niuyg928/p/15144888.html
Copyright © 2020-2023  润新知