首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对多列索引的mysql单列条件查询

对多列索引的mysql单列条件查询
EN

Stack Overflow用户
提问于 2022-06-18 06:42:10
回答 1查看 66关注 0票数 0

假设一个表只有一个索引:idx_goods (is_deleted,price)

is_deleted列为0或1

我的查询如下所示:where price < 10,以下是折叠行为中的哪一种:

1 mysql对二级指数进行全面扫描以进行价格匹配。

2 mysql部分扫描二级指数的价格匹配,从二级指数中的is_deleted=0开始,到达price=10,然后跳到二级指数中的is_deleted=1,然后在那里继续。

3 mysql忽略二级索引并扫描基表以进行价格匹配,换句话说,查询的索引键前缀中不包含的条件字段不是与辅助索引匹配,而是针对基表匹配,虽然条件字段是索引键的一部分

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-18 07:24:08

利用基于多个字段的索引,条件必须从索引一开始就主要使用字段。因此,如果索引位于字段(field1、field2、field3)上,那么条件必须包含field1。

更多关于MySQL指数优化的信息

有些数据库系统可以使用索引,即使它的第一部分是完整的,但其中的值范围非常有限。

可以使用EXPLAIN SELECT ..... 文档检查查询计划。

对于行数较少的表(少于10行)。)索引可能不被使用,因此更好地为实际测试准备更多的数据。

这个例子所示,索引不用于查询

代码语言:javascript
运行
复制
explain select * from test where price < 10

但是对于下面的查询,索引的使用效果很好。

代码语言:javascript
运行
复制
explain select * from test where is_deleted in (0,1) and price < 10

如果is_deleted可以为null,那么应该将条件修改为(is_deleted in (0,1) or is_deleted is null),但仍然使用索引。

而且,正如@Luuk所提到的,在这种情况下(条件仅限于价格字段),价格指数将是最好的选择。

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

https://stackoverflow.com/questions/72667245

复制
相关文章

相似问题

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