MySQL的复合索引可以创建多个,每个复合索引可以包含一列或多列。复合索引使用的基本原则是左侧对齐原则。例如,复合索引包含A,B,C字段,实际相当于创建了5个索引,即:
创新互联服务项目包括潘集网站建设、潘集网站制作、潘集网页制作以及潘集网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,潘集网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到潘集省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
那么问题来了,如果我们创建两个复合索引,复合索引1:包含A,B,C列和复合索引2:包含B,C列,MySQL如何执行呢?
按照正常的逻辑,和复合索引的原则,应该能命中的索引是A_B_C_index,让我们拭目以待吧!
结果:和上次测试的不一致,这次虽然包含ABC三个列,但命中的索引是B_C_index
重要结论:当命中两个或者多个不同的复合索引时,按照创建顺序不同,MySQL会有不同策略来选取其中的一个复合索引。
MySql为以下这些操作使用索引:
1、为了快速查找匹配WHERE条件的行。
2、为了从考虑的条件中消除行。如果在多个索引之间选择一个,正常情况下,MySql使用找到行的最小数量的那个索引。
3、如果表有一个multiple-column索引,任何一个索引的最左前缀可以通过使用优化器来查找行。例如,如果你有一个 three-column索引在(col1, col2, col3),你能搜索索引在(col1), (col1, col2),和 (col1, col2, col3)。
1、普通索引
这是最基本的索引,它没有任何限制。
2、唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
3、主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。
4、聚簇索引
聚簇索引的索引顺序就是数据存储的物理存储顺序,这样能保证索引值相近的元组所存储的物理位置也相近。
5、全文索引(FULLTEXT)
全文索引只能创建在数据类型为VARCHAR或TEXT的列上,建立全文索引后,能够在建立了全文索引的列上进行全文查找。全文索引只能在MyISAM存储引擎的表中创建。
实际工作使用中,索引可以建立在单一列上,称为单列索引,也可以建立在多个列上,称为组合索引。