mysql建立组合索引原则

原创 2015年02月27日 09:42:10
现实中,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.lai18.com/content/312860.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MySQL单列索引和组合索引的区别介绍

MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习。   为了形象地对比两者,再建...

关于 mysql 在联合查询时,使用 concat 拼接查询条件

表 A,现有地区表 表 B,现有广告表,但内容中的地区属性为原添加时的地区表数据,与现有地区表有差异 表 C,原有地区表 因此,这里需要通过 表 A  和 表 C ,找出对应地区的表数据,假...

mysql 的 concat 组合的妙用

数据库里面有很多视图过期,需要删除,就慢慢手工删除,老大考到后,就交给我一个用concat 组合批量删除,很是迷茫,后来经老大讲解,查资料,终于发现concat的强大功能,拿来于大家分享。 MySQ...

mysql组合索引最左前缀

原文出处:http://www.justwinit.cn/post/1935/ create TABLE myIndex ( i_testID INT NOT NULL AUTO_INCRE...

我眼中的架构师:一个优秀的架构师应该具备什么?

时光退回到七八年以前,那个时候“架构师“还是一个很“高大上“的title。可是在今天的互联网圈,随便一个工作了三、五年的开发人员,都可以称之为架构师。随便多翻几个招聘网站,你可以看到:前端架构师、后端...

分布式存储--Mysql--序列1--聚簇索引&非聚簇索引

从本篇开始,将进入分布式系统的存储的讨论。存储一直是设计分布式系统中最最核心的问题,这里面设计到诸多设计策略。而Mysql作为一个开源的数据库,在各大互联网公司使用极为普遍。本系列将从Mysql开始,...

MySQL_MySQL 联合索引详解 以及注意事项

联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,...

MySQL单列索引和组合索引的选择效率与explain分析

一、先阐述下单列索引和组合索引的概念: 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。 组合索引:即一个索包含多个列。 如果我们的查询where条件只...

mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合

原文出处:http://www.justwinit.cn/post/1935/ create TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREME...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)