如果即时通讯使用2个查询:
首先:查询所需的所有键/ ID
第二个:从tab1中选择*,其中tab1.id在(… ids列表.. ,,)中
id列表可以是几千个…
这样做是明智的选择还是最佳实践?
通常,在语句中使用IN子句是完全可以接受的最佳实践…假设您对更大的值集使用子查询。
答案应该永远是: 取决于 !从您的问题尚不清楚,您的值列表将是SELECT还是对它们进行硬编码。如果那几千个值位于另一个表(临时表或表变量)中,并且您对其进行了子查询,那肯定会更有性能。IE
SELECT * FROM Customer WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
IN
STATISTICS
考虑JOIN改用这些表;那应该总是产生更快的查询。
JOIN
SELECT * FROM Customer AS C INNER JOIN MyOtherLargeTableOfCustomers AS M ON C.CustomerID = M.CustomerID