mysql - 使用 MAX(id) 优化查询

标签 mysql sql performance max

我有一个查询,根据日期显示 id_units 的最后一个 id

我的查询是:

SELECT max(swg.id) AS id
 FROM swg
 WHERE swg.status != 0
 AND sg.dateswg <= TIMESTAMPADD(DAY,(6-WEEKDAY('2015-12-28')),'2015-12-28')
 GROUP BY swg.id_units
ORDER BY swg.id;

查询返回超过 2000 条记录,我认为有一种方法可以执行此查询。

我正在尝试像这样执行我的查询:

SELECT id
FROM (SELECT * FROM swg WHERE status != 0 AND dateswg <= TIMESTAMPADD(DAY,(6-WEEKDAY('2015-12-28')),'2015-12-28') ORDER BY id_units, id desc) x
GROUP BY id_units;

这是可行的,但我想知道是否有其他方法可以改进它

注意!

最佳答案

这是您的查询:

SELECT max(swg.id) AS id
FROM swg
WHERE swg.status <> 0 AND
      swg.dateswg <= TIMESTAMPADD(DAY, 6 - WEEKDAY('2015-12-28'), '2015-12-28')
GROUP BY swg.id_units
ORDER BY MAX(swg.id);

这很难优化,因为索引不能同时用于这两种情况。您可以从查询中使用的所有四列上的复合索引开始:swg(dateswg, status, id_units, id)

关于mysql - 使用 MAX(id) 优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118343/

相关文章:

sql - 我需要一个单独的表来描述 nvarchar(max)

sql - 根据每行中的列值重复行

c++ - 不同的函数使用相同的函数,减少开销

matlab - 更快的投影范数(二次形式、度量矩阵...)式计算

performance - 有没有可以快速处理大型数据集的DBGrid组件?

java - sql 连接错误 - 阻止我从 mysql 获取 'SELECT' 数据

MySql:强制创建子表条目

python - 使用 Python 将多个 CSV 文件导入 MySQL

mysql - 根据一个列名连接三个不同的表

.net - 在 SQL 数据库中存储没有年份的日期的最佳方法是什么?