第一个叫做列的离散度,我们先来看一下列的离散度的公式:

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)度相关推荐

  1. MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则

    转自:https://blog.csdn.net/tomorrow_fine/article/details/78337735 1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可 ...

  2. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

  3. 数据库创建索引的原则

    数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本.若数据库管理员能够对索引所需要付出的代价有一个充分的认识 ...

  4. 软件开发人员真的了解SQL索引吗(索引使用原则)

    前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引.        索引的优点:这个显而易见,正确的索引会大大提高数据查询,对结果进行排序.分组的操作效率 ...

  5. 索引语法——创建索引 || 查看索引 || 删除索引 || ALTER命令 索引设计原则

    索引语法 索引在创建表的时候,可以同时创建,也可以随时增加新的索引. 准备环境: 创建索引 查看索引 删除索引 ALTER命令 索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑 ...

  6. mysql单列索引和多列索引_浅谈MySQL索引优化

    索引基础知识总结及常见索引优化手段 一.索引简介 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为"排好序的快速查找数据 ...

  7. mysql聚集索引可以多列吗_MySQL使用单列索引和多列索引

    讨论MySQL选择索引时单列单列索引和多列索引使用,以及多列索引的最左前缀原则. 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一.可以考虑使用索引的主要有两种类型的列:在W ...

  8. 索引的优点,索引优化原则

    2019独角兽企业重金招聘Python工程师标准>>> 索引的优点: 1.索引减少了在查询过程中扫描的数据量 2.索引可以帮助服务器避免排序和临时表 3.索引可以将随机I/O变为了顺 ...

  9. MySQL 高级 - 索引 - 索引设计原则

    索引设计原则 ​ 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引. 对查询频次较高,且数据量比较大的表建立索引. 索引字段的选择,最佳 ...

最新文章

  1. ​kdevelop用法_weixin_44594953的博客-CSDN博客_kdevelop​
  2. 与基础事务管理器通讯失败
  3. 淘宝和QQ空间顶部工具栏三角形箭头的实现方式
  4. mysql C语言API接口及实例
  5. 5g虚拟技术旅游_5G赋能VR产业变革
  6. HashMap以及ConcurrentHashMap(volatile)
  7. 最长公共子序列Python解法
  8. PHP当作客户端访问连接另外一个socket的方法
  9. java long的包,long longValue()
  10. github 著名php,工欲善其事必先利其器,盘点Github上那些优秀的PHP项目
  11. [LeetCode-JAVA] Remove Duplicates from Sorted Array II
  12. 数据库实验八 数据库编程
  13. 并联串联混合的电压和电流_正确地把电池串联和并联起来
  14. python爬虫爬取网站视频
  15. 快速切换node版本
  16. QQ空间添加背景音乐
  17. 全新的服务器debian/ubuntu---校准时间、更新apt,设置ssh远程访问
  18. Android开发-API指南-uses-feature(1)
  19. gethub连接的提示
  20. 帆软报表(FineReport)版本9打开版本10的报表

热门文章

  1. nhibernate之many-to-many的性能
  2. 小幽默也有大道理:哲理幽默15则
  3. Appium+Python+Pycharm如何创建并运行自动化测试脚本【真机运行】
  4. Create QR Code
  5. Visual Studio 2005中C++的变化
  6. HikariCP 高性能的 JDBC 连接池
  7. 面试题:实现call、apply、bind
  8. webpack与babel的深奥,渣渣的我只能做个小笔记(持续更新)
  9. 华为FusionCube从融合到超融合 只为让计算变简单
  10. Git手册 - 分支远程同步