首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将索引与范围类型查询和其他条件一起使用

问将索引与范围类型查询和其他条件一起使用
EN

Stack Overflow用户
提问于 2011-10-18 15:09:11
回答 1查看 1.9K关注 0票数 2

我需要你的帮助。我有这样的疑问:

代码语言:javascript
复制
SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199);

上面的查询在ts_in列(范围类型)上使用btree索引。现在,我想为此添加另一个标准。例如:

代码语言:javascript
复制
SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) and is_removed=0;

上面的查询没有在ts_in列n(范围)上使用btree索引。

有没有人能告诉我为什么以及怎样才能以正确的方式达到非常快的计算速度。

我创建了两个用于测试的索引:

代码语言:javascript
复制
CREATE INDEX range_idx_1 using BTREE
ON cart (is_removed, ts_in);

和

代码语言:javascript
复制
CREATE INDEX range_idx_2 using BTREE
ON cart (ts_in , is_removed);

有趣的是,当我使用这个查询时:

代码语言:javascript
复制
EXPLAIN SELECT id FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) AND is_removed=0;

我收到以下结果:

代码语言:javascript
复制
id | select_type | table | type  | possible_keys           | key         | key_len | ref | rows  | Extra 
1  | SIMPLE      | cart  | range | range_idx_1,range_idx_2 | range_idx_1 | 6       |     | 17391 | Using where; Using index

上面的查询使用了索引,但是:

代码语言:javascript
复制
EXPLAIN SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) AND is_removed=0;

我有这样的结果:

代码语言:javascript
复制
id | select_type | table | type  | possible_keys           | key         | key_len | ref   | rows  | Extra 
1  | SIMPLE      | cart  | ref   | range_idx_1,range_idx_2 | range_idx_1 | 1       | const | 77979 | Using where

这不使用索引。

当我尝试使用索引或强制索引语法时,结果是相同的。在一种情况下,Mysql不使用索引。有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2011-10-18 15:20:59

运行为

代码语言:javascript
复制
EXPLAIN SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) and is_removed=0;

查看mysql查询优化器为什么选择不同的索引。

Mysql本身并不擅长组合索引,因此您可能需要一个组合索引来执行此查询。尝试添加索引(btree?)对于is_removed, ts_in (按此顺序!)。

您还可以通过向查询添加use索引来强制mysql使用索引。有时,与查询优化器选择的索引相比,这会提供更好的结果:

代码语言:javascript
复制
SELECT * FROM cart USE INDEX '<idx_name>' WHERE
(ts_in between 1249077600 AND 1318975199) and is_removed=0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7803627

复制
相关文章

相似问题

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