【问题标题】:Speeding up MIN, MAX for SQL with JOINs and about 6M rows使用 JOIN 和大约 6M 行加速 SQL 的 MIN、MAX
【发布时间】:2014-04-19 00:42:32
【问题描述】:

我在 MSSQL 2008 DB 中有大约 6M+ 行的表 [数据]。 我需要从中获取 MIN 和 MAX 加入一些表并按特定字段分组。

这是查询:

SELECT sites.id,
MIN(data.created),
MAX(data.created)
FROM [data] JOIN 
[columns] on data.columnID = columns.id 
JOIN [sites] on columns.sitesID = sites.id
GROUP BY sites.id

运行大约需要 20-25 秒,理想情况下应该以毫秒为单位,我相信这可以通过一些智能索引操作来实现。

我该怎么做?

目前我对所有 JOIN 字段都有索引,但这看起来还不够。

谢谢

【问题讨论】:

  • [data].[created] 上有索引吗?

标签: sql sql-server query-optimization aggregate-functions min


【解决方案1】:

假设过滤不需要sites表,你的查询相当于:

SELECT c.sitesID, MIN(d.created), MAX(d.created)
FROM [data] d JOIN 
     [columns] c
     on d.columnID = c.id 
GROUP BY c.sitesID;

这可能会运行得更快。你有columns(id) 的索引吗?

data(columnId, created)columns(id, sitesId) 上的索引将覆盖查询的索引。因为不访问数据页,所以这也应该更快。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2019-03-21
    • 2017-08-06
    • 1970-01-01
    • 2015-04-29
    • 2017-12-07
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多