索引使用原则-列的离散(sàn)度
第一个叫做列的离散度,我们先来看一下列的离散度的公式:
count(distinct(column_name)) : count(*),列的全部不同值和所有数据行的比例。数据行数相同的情况下,分子越大,列的离散度就越高。
简单来说,如果列的重复值越多,离散度就越低,重复值越少,离散度就越高。
了解了离散度的概念之后,我们再来思考一个问题,我们在name 上面建立索引和在gender 上面建立索引有什么区别。
当我们用在gender 上建立的索引去检索数据的时候,由于重复值太多,需要扫描的行数就更多。例如,我们现在在gender 列上面创建一个索引,然后看一下执行计划。
ALTER TABLE user_innodb DROP INDEX idx_user_gender;
ALTER TABLE user_innodb ADD INDEX idx_user_gender (gender); -- 耗时比较久
EXPLAIN SELECT * FROM `user_innodb` WHERE gender = 0;
show indexes from user_innodb;
而name 的离散度更高,比如“青山”的这名字,只需要扫描一行。
ALTER TABLE user_innodb DROP INDEX idx_user_name;
ALTER TABLE user_innodb ADD INDEX idx_user_name (name);
EXPLAIN SELECT * FROM `user_innodb` WHERE name = 'leon';
查看表上的索引,Cardinality [kɑ:dɪ'nælɪtɪ] 代表基数,代表预估的不重复的值的数量。索引的基数与表总行数越接近,列的离散度就越高。
show indexes from user_innodb;
如果在B+Tree 里面的重复值太多,MySQL 的优化器发现走索引跟使用全表扫描差不了多少的时候,就算建了索引,也不一定会走索引。
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
这个给我们的启发是什么?建立索引,要使用离散度(选择度)更高的字段。
索引使用原则-列的离散(sàn)度相关推荐
- MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则
转自:https://blog.csdn.net/tomorrow_fine/article/details/78337735 1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可 ...
- mysql单列索引和多列索引_mysql索引类型 normal, unique, full text
问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...
- 数据库创建索引的原则
数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本.若数据库管理员能够对索引所需要付出的代价有一个充分的认识 ...
- 软件开发人员真的了解SQL索引吗(索引使用原则)
前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引. 索引的优点:这个显而易见,正确的索引会大大提高数据查询,对结果进行排序.分组的操作效率 ...
- 索引语法——创建索引 || 查看索引 || 删除索引 || ALTER命令 索引设计原则
索引语法 索引在创建表的时候,可以同时创建,也可以随时增加新的索引. 准备环境: 创建索引 查看索引 删除索引 ALTER命令 索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑 ...
- mysql单列索引和多列索引_浅谈MySQL索引优化
索引基础知识总结及常见索引优化手段 一.索引简介 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为"排好序的快速查找数据 ...
- mysql聚集索引可以多列吗_MySQL使用单列索引和多列索引
讨论MySQL选择索引时单列单列索引和多列索引使用,以及多列索引的最左前缀原则. 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一.可以考虑使用索引的主要有两种类型的列:在W ...
- 索引的优点,索引优化原则
2019独角兽企业重金招聘Python工程师标准>>> 索引的优点: 1.索引减少了在查询过程中扫描的数据量 2.索引可以帮助服务器避免排序和临时表 3.索引可以将随机I/O变为了顺 ...
- MySQL 高级 - 索引 - 索引设计原则
索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引. 对查询频次较高,且数据量比较大的表建立索引. 索引字段的选择,最佳 ...
最新文章
- ​kdevelop用法_weixin_44594953的博客-CSDN博客_kdevelop​
- 与基础事务管理器通讯失败
- 淘宝和QQ空间顶部工具栏三角形箭头的实现方式
- mysql C语言API接口及实例
- 5g虚拟技术旅游_5G赋能VR产业变革
- HashMap以及ConcurrentHashMap(volatile)
- 最长公共子序列Python解法
- PHP当作客户端访问连接另外一个socket的方法
- java long的包,long longValue()
- github 著名php,工欲善其事必先利其器,盘点Github上那些优秀的PHP项目
- [LeetCode-JAVA] Remove Duplicates from Sorted Array II
- 数据库实验八 数据库编程
- 并联串联混合的电压和电流_正确地把电池串联和并联起来
- python爬虫爬取网站视频
- 快速切换node版本
- QQ空间添加背景音乐
- 全新的服务器debian/ubuntu---校准时间、更新apt,设置ssh远程访问
- Android开发-API指南-uses-feature(1)
- gethub连接的提示
- 帆软报表(FineReport)版本9打开版本10的报表