MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)

资料来源于网络,仅供参考学习。

CREATE TABLE test(
a INT,
b INT,
c INT,
KEY idx(a,b,c)
);

优: SELECT * FROM test WHERE a=10 AND b>50;
差: SELECT * FROM test WHERE b>50;

优: SELECT * FROM test ORDER BY a;
差: SELECT * FROM test ORDER BY b;
差: SELECT * FROM test ORDER BY c;

优: SELECT * FROM test WHERE a=10 ORDER BY a;
优: SELECT * FROM test WHERE a=10 ORDER BY b;
差: SELECT * FROM test WHERE a=10 ORDER BY c;

优: SELECT * FROM test WHERE a>10 ORDER BY a;
差: SELECT * FROM test WHERE a>10 ORDER BY b;
差: SELECT * FROM test WHERE a>10 ORDER BY c;

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY a;
优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY b;
优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY c;

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY a;
优: SELECT * FROM test WHERE a=10 AND b>10 ORDER BY b;
差: SELECT * FROM test WHERE a=10 AND b>10 ORDER BY c;

原文地址:https://www.cnblogs.com/huangzejun/p/8143718.html

时间: 2024-10-13 11:29:58

MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)的相关文章

MySQL使用单列索引和多列索引

讨论MySQL选择索引时单列单列索引和多列索引使用,以及多列索引的最左前缀原则. 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一.可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列.请看下面这个查询: Select age -- 不使用索引 FROM people Where firstname='Mike' -- 考虑使用索引 AND lastname='Sullivan' -- 考虑使用索引 这个查询属于简单查询.由于age

Mysql优化(出自官方文档) - 第八篇(索引优化系列)

目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexes 3 Column Indexes && Multiple-Column Indexes 4 Comparison of B-Tree and Hash Indexes 5 Use of Index Extensions 6 Invisible Indexes 7 Descending In

数据库索引- 多列索引

对复合索引,按照字段在查询条件中出现的频度建立索引.在复合索引中,记录首先按照第一个字段排序.对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推.因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用. 二.多列索引适合的场景 1.全字段匹配 2.匹配部分最左前缀 3.匹配第一列 4.匹配第一列范围查询(可用用like a%,但不能使用like %b) 5.精确匹配某一列

【转】MYSQL数据库四种索引类型的简单使用--MYSQL组合索引“最左前缀”原则

MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度:如果是BLOB和TEXT类型,必须指定 length,下同. 修改表结构 ALTER mytable ADD INDEX

MySQL 的索引和最左前缀原则

这两天看<构建高性能Web站点>这本书,感觉写的真是不错,很多实际项目中会碰到的问题都有所提及,今天看到一个最左前缀原则,以前也听说过,不过一直没搞明白,今天查了下. 通过实例理解单列索引.多列索引以及最左前缀原则 实例:现在我们想查出满足以下条件的用户id:mysql>SELECT `uid` FROM people WHERE lname`='Liu'  AND `fname`='Zhiqun' AND `age`=26因为我们不想扫描整表,故考虑用索引. 单列索引:ALTER TA

MySQL数据库中的索引(二)——索引的使用,最左前缀原则

上文中,我们了解了MySQL不同引擎下索引的实现原理,在本文我们将继续探讨一下索引的使用以及优化. 创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能.

索引最左前缀匹配原则

如果索引字符串的前面n个字符都不相同,那么最好不要索引整个数据列,二十索引前n个字符,这样可以节省大量空间. 如果在数据列a,b,c上建立了复合索引,索引中的数据行按照a/b/c次序排列,因此数据表会自动的按照a/b和a排列,即使指定了a,或者a和b的值,mysql也可以使用这个索引. 这个索引可以用于如下数据列的组合: a,  b,c a,b a Mysql不能利用这个索引搜索没有包含在最左前缀的内容.如按照b或者按照c来搜索,就不会使用这个索引.如果搜索给定a和c的数据,也不能使用这个索引.

性能测试四十二:sql案例之联合索引最左前缀

联合索引:一个索引同时作用于多个字段 联合索引的最左前缀: A.B.C3个字段--联合索引 这个时候,可以使用的查询条件有:A.A+B.A+C.A+B+C,唯独不能使用B+C,即最左侧那个字段必须匹配到 联合索引最左前缀如果匹配不到,会造成索引失效,对性能影响非常大,所以联合索引的顺序很重要 看一下案例 Unique: 这种情况,单个cardNO.course.sex均允许重复,但是当这3个字段组到一起以后,就不允许任何两个重复,这里为了设计特别场景,把sex移到索引字段的最前面 接口:http

索引的最左前缀原则

索引的最左前缀原则 原理 mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1).(col1,col2)上建立了索引: 如果有一个3列索引(col1,col2,col3),则已经对(col1).(col1,col2).(col1,col2,col3)上建立了索引: 范围查询 范围列可以用到索引(必须是最左前缀),但是范围列后面的列无法用到索引.同时,索引最多用于一个范围列,因此如果查询条件中有两个范围列则无法全用到索