首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于现有索引子集的查询,mysql是否需要额外的索引?

对于现有索引子集的查询,mysql是否需要额外的索引?
EN

Stack Overflow用户
提问于 2020-05-04 09:47:40
回答 2查看 93关注 0票数 1

如果我在第4栏上有索引:

代码语言:javascript
复制
CREATE TABLE mytable (
   from varchar(20) NOT NULL,
   to varchar(20) NOT NULL,
   departure date NOT NULL,
   arrival date NOT NULL,
   ....
   KEY mykey(from, to, departure, arrival)
);

当我只对fromto进行均匀度查询时,是否需要创建一个额外的索引KEY fromto (from, to),以便mysql使用索引进行扫描?

或者mysql会重用现有的索引,因为我只是使用SELECT * from mytable where from = 'New' and to = 'York'查询其中的一个子集?甚至只有一个关于...from = 'New'的查询

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-04 10:13:11

Mysql 文档说;

如果表有多列索引,则由优化器any leftmost prefix of the index can be used查找行.例如,如果您有一个三列索引on (col1,col2,col3),那么您已经在(col1)、(col1、col2)和(col1、col2、col3)上建立了索引搜索功能。

您可以使用explain查看是否使用索引。

代码语言:javascript
复制
mysql> explain select * from mytable where `from` = 'a' and `to` = 'b';
+----+-------------+---------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key   | key_len | ref         | rows | filtered | Extra       |
+----+-------------+---------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+
|  1 | SIMPLE      | mytable | NULL       | ref  | mykey         | mykey | 164     | const,const |    1 |   100.00 | Using index |
+----+-------------+---------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+
1 row in set, 1 warning (0.02 sec)
票数 2
EN

Stack Overflow用户

发布于 2020-05-04 10:08:08

不,你不需要额外的索引。只要可以使用索引的前缀部分,就可以使用索引。

如果您有一个索引on (从、到、离开、到达),则可以将该索引用于任何在以下方面具有相等匹配的查询:

(自)

(从,到)

(从、到、离)

(往返、离开、抵达)

按任何顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61589358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档