mysql - 在 mysql 中缓慢选择

标签 mysql sql indexing

我在 mysql 中遇到查询问题。为了绘制图表,我使用这种简单的结构创建了一个具有“X SECOND”间隔的临时表:

CREATE TEMPORARY TABLE intervals (date DATETIME NOT NULL PRIMARY KEY)

并查询此 SELECT:

SELECT COUNT(dt.Device) AS count, i.date 
FROM intervals i LEFT JOIN device_tracker dt ON 
    i.date <= dt.date AND 
    i.date + INTERVAL X SECOND >= dt.date 
GROUP BY i.date

Device 是主键,dt.date 是索引。

device_tracker 中有 20000 行且 30-35 间隔查询大约需要 4-5 秒。那是正常的吗?我可以做些什么来提高速度吗?

这是解释:

id  select_type table   type    possible_keys   key      key_len  ref   rows    Extra
-------------------------------------------------------------------------------------------------------------------
1    SIMPLE      i       index   NULL            PRIMARY  8        NULL  29      Using index; Using temporary; Using filesort
1    SIMPLE      dt      ALL     date            NULL     NULL     NULL  21594   

编辑:Last_time 不存在,我正在使用日期。

最佳答案

来自 Galz 的回复:

尝试使用 HAVING 而不是 WHERE:SELECT ... LEFT JOIN ... GROUP BY ... HAVING i.date IS NOT NULL

成功了。

关于mysql - 在 mysql 中缓慢选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235434/

相关文章:

php - 尝试进行 php/mysql 搜索,需要将字符串分解为数组并搜索

sql - Oracle SQL命令在子查询中的问题!

java - 如何改进返回给定 int 数组的具有排序索引的 int 数组的代码?

php - 从数据库表 MYSQL 中选择 2 个随机成员

javascript - 用在特定表格行中选择的相应值填充表格数据

mysql - 无法部署 MySQL pod。 --initialize 指定但数据目录中有文件

sql - 在 SQL Server 2017 中使用标识列间隙

php - MySQL复杂查询。基于另一个表动态更新行

mysql - 包含加密数据的 BLOB 上的索引

ruby-on-rails - 在生产中使用 MongoDB 构建索引的时间和频率