• mysql-索引


    MyISAM: 
        索引存放文件数据指针(物理地址),根据指针查询具体的记录
        主键和辅助索引都是独立的,都只存放物理地址
    
    INNODB
        主键索引存放文件数据,根据主键即可查询数据
        辅助索引存放主键索引值,根据辅助索引查到主键索引,再根据主键查询数据
    
    Q:  为何innodb辅助索引存放主键索引, 不直接存放数据?
    A:  待解决
    
    myisam、innodb索引都采用B+Tree
    Q:  为何索引是B+Tree结构?
    A:  (1)hash索引, hash(key) 计算后会得到一个唯一值(地址值),这样就不能进行范围、排序查询,也不能进行多条件查询。其时间复杂度O(1)
        (2)二叉树,在主键自增情况下,数据库插入数据时,会导致二叉树失衡,将退化为链表,这样检索效率很低,其时间复杂度为O(n)
        (3)红黑树,优化二叉树不平衡问题,但在主键自增情况下,数据库插入大量数据时,红黑树也会慢慢进行偏移且层级会很深,导致查询效率较低,红黑树较二叉树而言,只能保证不会退化为链表,其时间复杂度为O(Log2n)到O(n)之间
        (4)最终采用B+Tree,根节点不再是单一的索引值,而是一段范围的索引值,查询数据时,首先会将根节点的一段范围索引值都加载到内存,再根据范围内的索引值可以继续向子节点进行范围内的索引查询,直到在叶子节点上找到对应的数据,
       支持横向扩展(根节点及非叶子节点的索引范围不断横向扩大), 解决优化索引的不平衡性

                       【15】 ---A--- 【30】 ---B--- 【45】

                【15】---C--- 【20】 ---D--- 【25】 --- ...

    【15】 -- 【17】-- 【19】 -- ...
    【zs】 【ls】 【ww】

        假设:查询索引为17的数据.
        流程:首先会将根节点的15-45范围内的索引加载到内存
           根据比较得知17在区间A中(区间A就是一个指针引用,用于查询其子节点), 则在A区间下的子节点进行查找
    再进行比较得知17在子区间C中,则在C区间下的子节点进行查找
    再进行比较最终匹配17,根据索引17上的指针从而查询到数据 "ls"







  • 相关阅读:
    基于 HTML5 Canvas 的交互式地铁线路图
    基于HTML5的WebGL实现json和echarts图表展现在同一个界面
    基于HTML5和WebGL的3D网络拓扑结构图
    JavaScript基础:创建对象
    使用ksoap2报java.io.EOFException异常问题解决方法
    Silverlight之我见
    今年的IT大趋势是虚拟现实
    Apache服务器部署ASP.NET网站
    Bootstrap优秀网站:乐窝网
    [转载]C#读取Excel几种方法的体会
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/12377781.html
Copyright © 2020-2023  润新知