MySQL 索引解析

el/2023/12/3 1:49:03

如果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’);
    
    尽量的扩展索引,不要新建索引
    


http://www.ngui.cc/el/2111877.html

相关文章

UltraISO 启动 Ubuntu 启动盘错误问题

问题&#xff1a; boot failed: please change disks and press a key to continue 1、根据国内的教程&#xff0c;用Ultraiso制作了一个Ubuntu15.04的U盘启动盘&#xff0c;在装系统的时候提示如下错误&#xff1a; boot failed: please change disks and press a key to co…

Ubuntu gparted 分区使用

free space Preceding: 是上一级分区要给的空间 new size : 是当前这个要给的空间 free space Following : 是下一级要分配的空间

redis 命令使用

启动redisredis-clikey 是全局唯一的redisstringsetSETNX key 不存在SETEX 秒PSETEX 毫秒getGETSET 返旧值&#xff0c;设置新值STRLEN 获取字符串长度 0EXISTS 判断是否存在APPEND 往后面追加字符串SETRANGE 从偏移量开始覆盖值GETRANGE 获取字符串指定部分&#xff0c; -1 表…

面试 redis mysql rpc

最全面试 高级面试

Python 文件路径

import osprint ***获取当前目录*** print os.getcwd() print os.path.abspath(os.path.dirname(__file__))print ***获取上级目录*** print os.path.abspath(os.path.dirname(os.path.dirname(__file__))) print os.path.abspath(os.path.dirname(os.getcwd())) print os.path…

Python 图片路径分割参考

pillow 图片参数详解 算法分割 普通参数分割 水滴算法分割

Python 导入自定义目录包

自定义模块在某个目录&#xff0c;在其他目录使用如下/root/directory/aa/bb/cc/utils.py 导入方法 import syssys.path.append(/root/directory) # 或者使用相对路径 sys.path.append(../demo)from aa.bb.cc.utils import * SomeClass.someMethod()