定义
联合索引是MySQL中常用的索引类型之一,它是由多个列组合而成的索引。联合索引可以帮助优化查询,提高查询效率,尤其是在多个列同时参与查询时。
最左匹配是指在联合索引中,如果查询条件中只涉及到联合索引中的最左侧列,那么可以利用该联合索引进行快速匹配。如果查询条件中还涉及到联合索引中的其他列,那么查询优化器可能无法充分利用联合索引,从而导致性能下降。
范围查询是指查询条件中涉及到了比较运算符(>, <, >=, <=, BETWEEN, IN等),这类查询条件无法使用“=”运算符进行匹配,需要进行范围匹配。最左匹配原则遇到范围查询就停止匹配。
例:
id | name | age | address
现在要在该表上建立一个联合索引,由name和age组成,即:
CREATE INDEX idx_name_age ON t (name, age);
设有两个查询:
- SELECT id FROM t WHERE id > 5 AND age>25;
- SELECT id FROM t WHERE age>25;
- SELECT id FROM t WHERE id = 5 AND age>25;
查询一,可以使用联合索引进行最左匹配。查询优化器可以利用联合索引进行快速匹配,定位到符合条件的数据行。
查询二,不可以匹配;虽然也涉及到了联合索引的一部分age,但是查询条件中没有涉及到联合索引的最左侧列id,因此无法进行最左匹配。在这种情况下,查询优化器可能会选择全表扫描或者使用其他索引进行查询,从而导致性能下降。
查询三,不可以匹配;最左匹配原则遇到范围查询就停止匹配。
Q:SELECT id FROM t WHERE age>25 AND id > 5 ; 是否可以匹配索引?
能;Mysql有优化器会自动调整顺序与索引顺序一致。
Q: 对下面的查询如何建立查询?
SELECT * FROM table
WHERE a = 1 and b = 2 and c = 3;
重点要的是将区分度高的字段放在前面,区分度低的字段放后面。像性别、状态这种字段区分度就很低,我们一般放后面。
例如假设区分度由大到小为b,a,c
。那么我们就对(b,a,c)
建立索引。在执行sql的时候,优化器会帮我们调整where
后a,b,c
的顺序,让我们用上索引。文章来源:https://www.toymoban.com/news/detail-406099.html
REF:(28条消息) mysql 联合索引_TanaStudy的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-406099.html
到了这里,关于联合索引,最左匹配,范围查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!