zoukankan      html  css  js  c++  java
  • 5.3.5 聚簇索引:

    5.3.5 聚簇索引:
    
    
    聚簇索引 并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,
    
    但InnoDB 的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。
    
    
    Oracle 用户可能更熟悉索引组织表(index-organized table)的说话,实际上是一个意思
    
    
    InnoDB 将通过主键聚集数据
    
    如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式
    
    定义一个主键来作为聚簇索引。
    
    
    聚集的数据有一些重要的优点:
    
    
    1.可以把相关数据保存在一起。
    
    2.数据访问更快,聚族索引将索引和数据保存在同一个B-Tree中,因此从聚簇索引中获取数据通常
    
    比非聚簇索引中查找更快
    
    
    聚簇索引也有一些缺点:
    
    1.聚簇数据最大限度地提高了I/O密集型应用的性能,但如果数据全部都放在内存中,则访问的顺序就没那么重要了,
    
    聚族索引页就没什么优势了。
    
    
    2.插入速度严重依赖插入顺序,按照主键插入是加载数据到InnoDB表中速度最快的方式。
    
    但如果不是按照主键顺序加载数据,那么在加载完成后最好使用OPTIMIZE TABLE命令重新组织一下表
    
    3.更新聚簇索引列的代价很高,因为会强制InnoDB将每个被更新的行移动到新的位置
    
    4.二级索引(非聚族索引)可能比想象的要更大,因为在二级索引的叶子节点包含了引用行的主键列
    
    5.二级索引访问需要两次索引查找,而不是一次
    
    
    最后一点可能让人有些疑惑,为什么二级索引需要两次索引查找?
    
    答案在于二级索引中保存了"行指针"的实质。 要记住
    
    二级索引叶子节点保存的不是指向行的物理位置的指针,而是行的主键值
    
    这意味着通过二级索引查找行,存储引擎需要找到2级索引的叶子节点获得对应的主键值,
    
    然后根据这个值无聚簇索引中查找到对应的行。
    

  • 相关阅读:
    代码转换为html显示
    subprocess实时获取结果和捕获错误
    centos7开放端口和防火墙设置
    Inside The C++ Object Model(一)
    知其所以然(以算法学习为例)
    sql语法
    DLL断点调试
    我的算法学习之路
    算法系列之一
    cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349973.html
Copyright © 2011-2022 走看看