gpt4 book ai didi

mysql - MySql中BETWEEN操作的索引

转载 作者:可可西里 更新时间:2023-11-01 08:38:21 25 4
gpt4 key购买 nike

我在 MySQL 中有几个表,其中存储了按时间顺序排列的数据。我在最后为这个带有日期字段的表添加了覆盖索引。在我的查询中,我正在使用日期字段的 BETWEEN 操作选择一段时间内的数据。所以我的 WHERE 语句由覆盖索引的所有字段组成。

当我在 Extra 列中执行 EXPLAIN 查询时,我有“Using where” - 所以,正如我所想,这意味着日期字段没有在索引中搜索。当我选择一个时间段的数据时 - 我使用“=”操作而不是 BETWEEN 并且“Using where”没有出现 - 全部在索引中搜索。

对于要在索引中搜索的所有包含 BETWEEN 操作的 WHERE 语句,我能做什么?

更新:

表结构:

CREATE TABLE  phones_stat (
id_site int(10) unsigned NOT NULL,
group smallint(5) unsigned NOT NULL,
day date NOT NULL,
id_phone mediumint(8) unsigned NOT NULL,
sessions int(10) unsigned NOT NULL,
PRIMARY KEY (id_site,group,day,id_phone) USING BTREE
) ;

查询:

SELECT id_phone, 
SUM(sessions) AS cnt
FROM phones_stat
WHERE id_site = 25
AND group = 1
AND day BETWEEN '2010-01-01' AND '2010-01-31'
GROUP BY id_phone
ORDER BY cnt DESC

最佳答案

你有多少行?有时,如果优化器认为没有必要(例如,如果表中的行数非常小),则不会使用索引。您能告诉我们您的 SQL 是什么样子的吗?

您可以尝试提示您的索引使用情况并查看您在 EXPLAIN 中得到的内容,只是为了确认您的索引被忽略了,例如

http://dev.mysql.com/doc/refman/5.1/en/optimizer-issues.html

关于mysql - MySql中BETWEEN操作的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com