我有一个看起来像这样的查询:
SELECT Distinct(ContKey)
FROM Point
WHERE Created > 1245750191000
AND Created < 1345753791000
AND ContainerId='abcd'
查询的目的是获取所有不同的 ContKey 值,这些值根据某些条件(包括范围)映射到表“Container”中的字段“Key”。
它运行得很慢。我确信这不是索引问题,因为我们在相关字段和字段组合上有一个索引。在我拥有数百万行的数据库中,此查询需要 300 秒才能返回 69,338 个结果。太慢了!
我正在尝试重新编写查询以消除该DISTINCT
子句。我想出了这个:
SELECT Key
FROM Container t
WHERE t.ContainerId = 'abcd'
AND EXISTS( SELECT 1
FROM Point
WHERE Created > 1245750191000
AND Created < 1345753791000
AND ContainerId = t.ContainerId )
它运行得更快(不到一秒)。但产生更多的结果。确切地说是72,330。这是重写不正确吗?根据我正在尝试做的事情,我希望我可以改进查询。
谢谢。