MySQL单列索引和组合索引的区别介绍
2011-02-22 18:40
701 查看
MySQL单列索引和组合索引的区别介绍
(2011-02-16 17:38:26)转载
标签:mysql单列索引组合区别介绍it | 分类: Mysql数据库 |
为了形象地对比两者,再建一个表:
CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) ); |
city,age,school 的组合各不相同。
来看这条T-SQL:
SELECT i_testID FROM myIndex WHERE vc_Name='erquan' AND vc_City='郑州' AND i_Age=25; |
在vc_Name列上建立了索引。执行 T-SQL 时,MYSQL 很快将目标锁定在了vc_Name=erquan 的 5
条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉 vc_City 不等于"郑州"的记录,再排除 i_Age 不等于 25
的记录,最后筛选出唯一的符合条件的记录。
虽然在 vc_Name 上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在
vc_City 和 i_Age 分别建立的MySQL单列索引的效率相似。
为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 vc_Name,vc_City,i_Age
建到一个索引里:
ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age); |
10,这样会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。
执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录。
肯定有人要问了,如果分别在 vc_Name,vc_City,i_Age 上建立单列索引,让该表有 3
个单列索引,查询时和上述的组合索引效率一样吗?大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但 MySQL
只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了
vc_Name,vc_City,i_Age vc_Name,vc_City vc_Name |
组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个 T-SQL
会用到:
SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州" SELECT * FROM myIndex WHREE vc_Name="erquan" |
SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="郑州" SELECT * FROM myIndex WHREE vc_City="郑州" |
相关文章推荐
- MySQL单列索引和组合索引的创建及区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍(转)
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- [转]MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引和组合索引的区别介绍
- MySQL单列索引、组合索引的使用区别
- MySQL单列索引和组合索引的区别
- Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
- Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
- MySQL单列索引和组合索引的区别
- MySQL单列索引和组合索引的区别