首页 / MYSQL / mysql建立组合索引原则
mysql建立组合索引原则
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql建立组合索引原则,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1936字,纯文字阅读大概需要3分钟。
内容图文
![mysql建立组合索引原则](/upload/InfoBanner/zyjiaocheng/556/401f43349a8448429a104ec958137250.jpg)
现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-Tree格式索引,可以直接定位记录,无需扫描。 mysql建立多列索引有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引; 如果有一个 3
现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-Tree格式索引,可以直接定位记录,无需扫描。mysql建立多列索引有最左前缀的原则,即最左优先,如:
- 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;
- 如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)和(col1,col2,col3)上建立了索引;
如何建立组合索引?
- 最频繁使用的列放在左边;
- 查看列的选择性(即该列的索引值数量与记录数量的比值),比值越高,效果越好;
例如用户表,如果按照用户姓名查询比较多,可以考虑在根据姓名建立索引。这里有两种形式:1在用户的名字字段(name)在做索引。2,在用户的名字和姓氏字段建立索引(name+family_name)。我们查看了下name字段的选择性,执行如下语句。
SELECT count(DISTINCT(name))/count(*) AS Selectivity FROM user;
+-------------+
| Selectivity |
+-------------+
| 0.0052 |
+-------------+
发现值非常小,因为name相同的用户实在太多。 再查看下name+family_name的选择性。
SELECT count(DISTINCT(concat(name, family_name)))/count(*) AS Selectivity FROM user;
+-------------+
| Selectivity |
+-------------+
|0.9563 |
+-------------+
发现名字完全相同的员工基本没有。但是索引key如果太长会使得索引文件变大并且维护开销增大,name+family name的长度等于30,还是希望有一个艰巨选择性和长度的方案。 因此可以考虑在name和family前自己字符上面建立索引,例如 name + left(family_name,5):
SELECT count(DISTINCT(concat(name, left(family_name,5))))/count(*) AS Selectivity FROM user;
+-------------+
| Selectivity |
+-------------+
| 0.9012 |
+-------------+
虽然不如以name+family_name的选择性高,但是已经基本满足要求。
本文出自:http://www.phpddt.com/, 原文地址:http://www.phpddt.com/db/mysql-indexes-optimization.html, 感谢原作者分享。
内容总结
以上是互联网集市为您收集整理的mysql建立组合索引原则全部内容,希望文章能够帮你解决mysql建立组合索引原则所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。