索引离散性 && 最左匹配原则
2023-04-18 16:07:37 时间
一 .列的离散性count(distinct col):count(col)
列的离散性(可以理解为差异性)=count(distinct col ) / count(col)
count(distinct col ) / count(col)比例越大,离散性越好
如图,name的离散性最高,sex最小
1.1离散型干啥的,有什么好处?
离散型越高,选择性越好,离散型越低,选择性越差
如下图,假如我们以sex做索引,0代表男,1代表女,建立索引,当我们建立好了,会发现,有好多路都一样,根本不知道去哪.....还不如直接全表顺序扫描哈哈哈
二 .最左匹配原则
对索引中关键字进行计算并排序(对比),一定是从左往右依次进行,且不可跳过.而且如果索引是字符串会一个字符一个字符的比对,如果是数字会直接比大小.如果是联合索引其实整体上类似于String的局部比较
啥意思呢?比如说我们按照name建立索引
现在有两个name 一个是abc 一个是 a c b 一个是abg 一个是kut 一个是oop
那么一定先按一个字母一个字母位置的排,每次以前一个为基准继续排
2.1什么是联合索引?
- 单列索引 节点中关键字[name]
- 联合索引 联合索引不是好几个索引,他还是一个索引 节点中关键字[name,phoneNum]
- 单列索引是特殊的联合索引
2.2联合索引的理解
其实联合索引页就是一个组合索引而已 像[name,phoneNum] 索引结构也就是[abc,13333355533],只不过我们在按name排序后,我们才会按照phoneNum排序
2.3联合索引建立时候,列的选择原则
下面所谓的优先就是放最左边
- 1,经常用的列优先【最左匹配原则】
- 2,选择性(离散度)高的列优先【离散度高原则】
- 3,宽度小的列优先【最少空间原则】
2.4 建立联合索引的一些笨蛋问题(挖坑操作)
经排查发现最常用的sql语句:
Select*from users where name =?;
Select*from users where name=?and phoneNum=?;
"机灵"的李二狗的解决方案:
create index idx_name_phoneNum on users(name,phoneNum);
create index idx_name on users(name);
然而...你联合索引把name放第一位了,还另外建什么name索引啊
三 覆盖索引
如果查询列(select后跟的字段)可通过索引节点中的关键字直接返回,则该索引称之为覆盖索引。
覆盖索引可减少数据库IO,将随机IO变为顺序IO,可提高查询性能注意:
由于其是通过关键字返回的值,所以其关键字结点上必然保存了数据,故覆盖索引需要是和结点存放数据的Innodb连用,而MyaIsam用不到覆盖索引.
相关文章
- 为什么云计算是优化市场和参考数据管理的关键
- 甲骨文推出Oracle支持奖励计划 助力客户加快上云之旅
- 为什么边缘人工智能是智能家居的未来?
- 语义人工智能和数据管理领域的五大趋势
- 阿里云李飞飞:什么是云原生数据库
- 合成数据会推动 AI/ML 训练的未来吗?
- 戴尔边缘计算解决方案 | 农民伯伯终于不用看天吃饭了
- 一篇带给你Lwip网口接口netif
- 年中盘点:2021年炙手可热的10家边缘计算初创公司
- Hologres 揭秘:高性能原生加速 MaxCompute 核心原理
- 云市场竞争愈演愈烈,电信运营商如何突出重围?
- 超低价格别再错过,天翼云年中大促来啦
- 评估边缘计算软件以帮助管理边缘设备
- 看进程小 P 讲述它的网络性能故事!
- 5G网络对光纤布线要求的影响
- 5G只比4G多1G?人工智能不答应
- 3分钟带你彻底搞懂 Kafka
- 人工智能技术在高级威胁检测中的应用实践
- 八大预测分析工具比较
- NVIDIA 推出医疗 AI 计算平台