【发布时间】:2016-05-11 01:01:45
【问题描述】:
我希望标题有点清楚。
情况: 带有测量值的表格,这里有大约 350.000.000 条记录。 带有传感器 ID 的表,这里有大约 300 条记录。
现在,当我想要传感器的特定测量值时,我获取传感器 ID 并使用该传感器 ID(以及特定数据或其他)查询测量表。这些查询运行得非常快(传感器 id 和其他一些列的索引)。
但是,这是一个长期运行的项目,我不知道有多少数据是“旧的”(我无法访问的测量值,因为传感器 ID 不在我的传感器表中)。让我们说:
measurements table
sensor id
1
2
3
4
5
sensor table
1
4
5
我想从测量表中选择所有不在传感器表中的 ID。我通常使用以下查询来执行此操作:
SELECT sensor_id
FROM measurement_table
WHERE sensor_id NOT IN (
SELECT sensor_id
FROM sensor_table
WHERE sensor_id IS NOT NULL)
)
GROUP BY sensor_id
在“小”表上,比如几千甚至一百万条记录,这是可行的。但是,当我在我的测量表上运行此查询时,它需要的时间太长(将近一个小时后取消)。
有没有办法让我找出测量表中有哪些传感器 ID,但传感器表中没有?
编辑:
SELECT COUNT(*)
FROM measurements_table
WHERE sensor_id IN (
SELECT sensor_id
FROM sensor_table
)
有效(无组,计数),给予:
334214244
表格总计:
337225071
所以我想通过 ID 找到那些 3010827 记录...
【问题讨论】:
标签: sql database performance sql-server-2008 ssms