首页 > 编程学习 > MySQL 索引解析

MySQL 索引解析

发布时间:2022/11/24 23:20:00

如果a的x次方等于N(a>0,且a不等于1),那么数x叫做以a为底N的对数(logarithm),记作x=logaN
    
    
    通过上面的分析,我们知道IO次数取决于b+数的高度 h,
    假设当前数据表的数据为 N,
    每个磁盘块的数据项的数量是 m,
    
    则有h=㏒(m+1)N,
    
    当数据量N一定的情况下,m越大,h越小;
    
    而m = 磁盘块的大小(固定) / 数据项的大小,  大
    
    磁盘块的大小也就是一个数据页的大小,是固定的,
    如果数据项占的空间越小,数据项的数量越多,树的高度越低。
    这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。
    这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,
    一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。
    当数据项等于1时将会退化成线性表。
    
    即索引的最左匹配特性。
    
    mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配
    
    =和in可以乱序
    
    尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,
    而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?
    使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
    
    索引列不能参与计算
        from_unixtime(create_time) = ’2014-05-29’
        create_time = unix_timestamp(’2014-05-29’);
    
    尽量的扩展索引,不要新建索引
    


本文链接:https://www.ngui.cc/el/2111877.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000