总结记录一下关于在MySQL中使用联合索引的注意事项,参考资料:《高性能MySQL》第二版
例:索引包含表中每一行的last_name、first_name和dob(生日)列,即key(last_name, first_name, dob)。
以下情况可以用到索引:
(1)匹配全值(Match the full value):对索引中的所有列都指定具体的值。
(2)匹配最左前缀(Match a leftmost prefix):你可以利用索引查找last name为Allen的人,仅仅使用索引中的第1列。
(3)匹配列前缀(Match a column prefix):例如,你可以利用索引查找last name以J开始的人,这仅仅使用索引中的第1列。
(4)匹配值的范围查询(Match a range of values):可以利用索引查找last name在Allen和Barrymore之间的人,仅仅使用索引中第1列。
(5)匹配部分精确而其它部分进行范围匹配(Match one part exactly and match a range on another part):可以利用索引查找last name为Allen,而first name以字母K开始的人。
(6)仅对索引进行查询(Index-only queries):如果查询的列都位于索引中,则不需要读取元组的值。
由于B-树中的节点都是顺序存储的,所以可以利用索引进行查找(找某些值),也可以对查询结果进行ORDER BY。当然,使用B-tree索引有以下一些限制:
(1)查询必须从索引的最左边的列开始。关于这点已经提了很多遍了。例如你不能利用索引查找在某一天出生的人。
(2)不能跳过某一索引列。例如,你不能利用索引查找last name为Smith且出生于某一天的人。
(3)存储引擎不能使用索引中范围条件右边的列。例如,如果你的查询语句为WHERE last_name="Smith" AND first_name LIKE 'J%' AND dob='1976-12-23',则该查询只会使用索引中的前两列,因为LIKE是范围查询。
相关推荐
之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。 什么时候创建组合索引? 当我们的where查询存在多个...
MySQL联合索引是一种优化查询性能的机制,它允许在多个列上创建单个索引,以便在查询中同时使用这些列时能更快地找到数据。本示例将深入讲解联合索引的概念,并通过实例来展示如何在MySQL中创建和使用联合索引。 ...
MySQL的联合索引是一种优化查询性能的有效手段,它遵循“最左匹配原则”。这个原则指出,当创建一个包含多个列的联合索引时(例如,KEY test_col1_col2_col3 ON test(col1, col2, col3)),MySQL会在查询时从索引的...
内容概要:本文详细解释了 MySQL 中联合索引的概念,包括联合索引的定义、索引构建原理、最左匹配原则,以及使用联合索引的实际案例。同时介绍了在创建与删除联合索引方面的具体操作步骤和技术细节,探讨了何时使用...
MySQL联合索引,也称为复合索引,是数据库优化中的一种关键策略,它允许数据库系统在多个列上创建单一的索引,以提高查询性能。理解联合索引的工作原理和如何有效利用它对于提升数据库查询效率至关重要。 联合索引...
假设我们需要频繁查询`firstname`和`lastname`字段,那么可以考虑在这两个字段上创建一个联合索引: ```sql ALTER TABLE people ADD INDEX idx_firstname_lastname (firstname, lastname); ``` 这样,当执行类似于...
本文将深入探讨全文索引、联合索引、LIKE查询以及JSON查询这四种不同方法在实际应用中的速度比较,并通过实例进行详细解析。 首先,全文索引(Full-text Index)是MySQL提供的一种特殊类型的索引,专门用于提高全文...
联合索引:索引列有多个字段,使用时需要满足最左前缀原则 普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); ...
- 联合索引未使用第一个索引列。 - 字符串类型的列在条件中未正确使用引号。 - 组合索引中有列值为NULL。 - 在一个SELECT语句中,索引只能使用一次(如在WHERE中使用后,在ORDER BY中不再有效)。 - 在查询条件中...
当在查询中对联合索引的第一个字段使用范围条件时,如`name > 'LiLei'`,MySQL可能会选择不使用该索引,因为它认为范围查询会导致大量行被扫描,导致回表操作效率低下,因此可能选择全表扫描。这可以通过`EXPLAIN`...
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
总结起来,优化MySQL数据库性能的关键在于合理使用联合索引,并理解Where子句的执行顺序。创建合适的索引可以大大提高查询效率,但同时也需要避免索引失效的情况,如不当使用`OR`。同时,编写查询时,需考虑Where...
在示例SQL中,创建一个包含`status`, `operator_id`, `type`, `operate_time`的联合索引,并且考虑到`operate_time`的范围查询,应将其放在索引的最后。 4. **查询优化** 优化慢查询不仅涉及索引的创建,还包括...
- 联合索引遵循最左前缀原则:查询时优先使用联合索引中最左边的列进行匹配,从而提高查询效率。 #### 三、事务 **事务的概念与ACID特性:** 事务是一组操作的集合,这些操作作为一个整体被提交或回滚。事务具有...
通过联合索引优化MYSQL慢查询 一、慢SQL分析 慢SQL如下 SELECT SUM(t.amount) as amount FROM (SELECT game_id,room_id,is_robot,amount,record_time FROM t_statements_logs WHERE game_id = 30 AND is_robot = 0 ...
MySQL InnoDB 联合索引是数据库性能优化的关键元素,尤其在处理复杂查询时。本文将通过一个具体的案例深入解析如何正确使用InnoDB联合索引来提升查询效率。 案例描述了一个业务查询,目的是获取最新审核的5条在线...
索引下推(Index Condition Pushdown,简称 ICP)是 MySQL 5.6 版本的新特性,可以在对联合索引遍历过程中,对索引中包含的所有字段先做判断,过滤掉不符合条件的记录之后再回表,能有效的减少回表次数。 5. 索引...
2. **联合索引**:如果在联合索引的条件中,只有部分列被用作等值查询,而后面的列被用作范围查询,那么从范围查询的列开始的索引将不会被使用。 3. **不等于操作(!= 或 )**:不等于操作通常不会利用到索引,除非...