8.3.5 Multiple-Column Indexes 多列索引
来源:互联网 发布:传奇3物品数据库 编辑:程序博客网 时间:2024/06/03 08:40
8.3.5 Multiple-Column Indexes 多列索引
MySQL 可以创建符合索引(索引在多列上),一个索引可以包含多大16个列,对于某些数据类型,你可以索引一个前缀列。
MySQL 可以使用多列索引用于查询,测试所有的列在索引里,或者 查询只测试第一列,头2列,头3列。
如果你指定 了正确的顺序在索引定义的时候,一个简单的符合索引能加速若干查询。
一个多列索引 被认为是一个已排序的数组, 索引中包含值的行
注意:
作为一个复合索引,你可以介绍基于其他列的被hash的列。如果这个列是短的,合理的唯一的,可以被索引的,
可能比宽的在很多列上的索引更快。 在Mysql, 这是很容易使用这个额外的列:
SELECT * FROM tbl_name
WHERE hash_col=MD5(CONCAT(val1,val2))
AND col1=val1 AND col2=val2;
假设一个表有下面的规则:
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
name 索引是在last_name和first_name 列,该指标可用于查找查询指定值在已知范围内组合last_name和first_name值。
它也可以用于特定的last_name值的查询,因为last_name列是索引最左边前缀。
因此, name index 适用于下面的查询:
SELECT * FROM test WHERE last_name=’Widenius’;
SELECT * FROM test
WHERE last_name=’Widenius’ AND first_name=’Michael’;
SELECT * FROM test
WHERE last_name=’Widenius’
AND (first_name=’Michael’ OR first_name=’Monty’);
SELECT * FROM test
WHERE last_name=’Widenius’
AND first_name >=’M’ AND first_name < ‘N’;
name index 不能用于下面的查询:
SELECT * FROM test WHERE first_name=’Michael’;
SELECT * FROM test
WHERE last_name=’Widenius’ OR first_name=’Michael’;
假设 你执行下面的SELECT 语句:
SELECT * FROM tbl_name
WHERE col1=val1 AND col2=val2;
如果一个多列索引存在col1和col2上, 相应的记录可以直接取得。 如果一个单独的 单列索引在col1和col2,
优化器尝试使用index merge 优化,或者尝试找到最限定的索引通过确定哪个索引排除最多的行。
如果表中有多个列的索引,索引的最左前缀能用于通过优化器来查找记录。比如,
如果你有一个3列索引在(col1, col2, col3), 你可以通过索引搜索在 (col1), (col1, col2), and (col1, col2, col3).
MySQL 无法使用索引来执行查找 ,如果列不构成索引的最左前缀进行查找,假定您有此处显示的选择语句:
SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
如果一个index 存在于(col1, col2, col3), 只有前2个能使用索引, 第三个和第四个查询
确实涉及了索引列,但是t (col2) and (col2, col3) 不是索引的最左边列。
- 8.3.5 Multiple-Column Indexes 多列索引
- 8.3.5 Multiple-Column Indexes 多列索引:
- 8.3.4 Column Indexes 列索引
- 8.3.4 Column Indexes 列索引
- SQL 2014新功能介绍系列8 – 可更新的列存储索引 (Updateable Column Store Indexes)
- RadGridView多列排序(Multiple Column Sorting)
- 浅谈MSSQL2012中的列存储索引(columnstore indexes)
- DB2 indexes(索引)
- Oracle Indexes(索引)
- [CSS3] 多列布局 column
- <css3>column(多列)
- 多列布局(column)
- 多列布局(column)
- 温习SQL Server 列存储索引 Column Store Index
- 8.3.1 How MySQL Uses Indexes MySQL 如何使用索引
- 8.3.1 How MySQL Uses Indexes MySQL 如何使用索引
- 每日MySQL之011:MySQL和DB2中的Multiple-Column Index(复合索引)
- MongoDB 部分索引(Partial Indexes)
- 核心态与用户态
- alter system reset
- caffe使用MemoryDataLayer从内存中加载数据
- VBA病毒“制造机”正在流行
- 深度学习-----数据预处理
- 8.3.5 Multiple-Column Indexes 多列索引
- Git Rebase教程: 用Git Rebase让时光倒流
- HDU1394 Minimum Inversion Number 逆序数- 线段树单点更新求
- ZXPxx头文件
- 好心酸,不知道怎么办好,没日没夜的做啊
- 摘要Myeclipse或Eclipse 老是出现JPA project Change Event Handler,导致需要执行的处理没有进行;关闭也关不完。
- 每天5道面试题(三)java基础
- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明
- BZOJ 1101([POI2007]Zap-满足x<=a&&y<=b&&gcd(x,y)=d的数对个数)