如果我使用2个查询:
首先:查询所需的所有键/ ID
第二:从tab1中选择*,其中tab1.id在(... ids list .. ,,)
中ids列表可能有数千......
是明智的还是最佳的做法,还是建议做那样的事情?
答案 0 :(得分:7)
作为一般规则,在语句中使用IN子句是完全可以接受的最佳实践...假设您使用子查询来处理更大的值集。
答案应始终如下:取决于!从您的问题中不清楚您的值列表是否是SELECT,或者您是否对它们进行硬编码。如果数千个值存在于另一个表(临时表或表变量)中并且您将它们取消了它们,那肯定会更高效。即。
SELECT * FROM Customer
WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
IN
子句的列STATISTICS
(如果SQL Server)定期更新。JOIN
这些表格;应始终产生更快的查询。SELECT * FROM Customer AS C
INNER JOIN MyOtherLargeTableOfCustomers AS M
ON C.CustomerID = M.CustomerID
答案 1 :(得分:1)
如果您的ID在可连接表中是可查询的,则使用内部联接应该为您提供最快的查询,并为您提供一个小得多的查询以发送到数据库。