SQL:SELECT IN更快更好的做法?

Abu*_*qil 3 sql

如果我使用2个查询:

第一:查询所需的所有键/ ID

第二步:从tab1中选择*,其中tab1.id在(... ids list .. ,,)

ids列表可以有几千...

是明智的还是最佳的做法或建议做那样的事情?

p.c*_*ell 7

作为一般规则,在语句中使用IN子句是完全可以接受的最佳实践...假设您使用子查询来处理更大的值集.

答案应该始终是:这取决于!从您的问题中不清楚您的值列表是否是SELECT,或者您是否对它们进行硬编码.如果数千个值存在于另一个表(临时表或表变量)中并且您将它们取消了它们,那肯定会更高效.即

    SELECT * FROM Customer 
    WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
Run Code Online (Sandbox Code Playgroud)
  • 您正在执行该IN子句的列的索引程度如何?
  • 什么是数据类型?如果是数字数据类型,那么您不应该有任何性能问题.
  • 确保您的STATISTICS(如果SQL Server)定期更新.
  • 如果数据类型是基于字符的,或者是guid,则可能会遇到一些性能问题,尤其是当您同时运行多个查询时,如您所述,列表数量为数千个.
  • 考虑改变JOIN这些表格; 应始终产生更快的查询.
SELECT * FROM Customer AS C 
INNER JOIN MyOtherLargeTableOfCustomers AS M
ON C.CustomerID = M.CustomerID
Run Code Online (Sandbox Code Playgroud)