使用某些值排除某些记录SQL Select

时间:2016-08-16 20:08:10

标签: sql vba ms-access select

我使用了以下主题中的解决方案(来自AdaTheDev),因为它与同一个问题有关: How to exclude records with certain values in sql select

但是,当将相同的查询应用于超过40,000条记录时,查询处理时间过长(> 30分钟)。是否有另一种方法可以查询具有特定值的某些记录(与上述stackoverflow线程中的问题相同)。我试图在下面使用这个,但仍然没有运气:

 SELECT StoreId
FROM sc
WHERE StoreId NOT IN (
  SELECT StoreId
  FROM StoreClients
  Where ClientId=5
);

谢谢 -

2 个答案:

答案 0 :(得分:1)

您可以使用EXISTS

SELECT StoreId
FROM sc
WHERE NOT EXISTS (
  SELECT 1
  FROM StoreClients cl
  WHERE sc.StoreId = cl.StoreId
  AND cl.ClientId = 5
  )

确保在StoreId列上创建索引。您的查询也可以从ClientId上的索引中受益。

答案 1 :(得分:1)

对于SQL Server,40,000行不是太大。另一个线程也提出了一些好的问题。如果我理解正确,你现在的问题就是表现。 要提高性能,您可能需要向表中添加新索引,或者只更新表中的统计信息。

如果您在SQL Server Management Studio中运行此查询以进行测试和性能调整,请确保选择"包含实际执行计划"。这将使查询执行时间更长,但执行计划结果可以帮助您花费时间。 它通常建议添加一些索引以提高性能,这很容易遵循。 如果无法添加新索引,那么您必须花一些时间阅读如何理解执行计划的图表并找到缓慢的区域。