如果我使用 2 个查询:
第一:查询所需的所有键/ID
第二: select * from tab1 where tab1.id in (...ids list..,)
ids 列表可能有数千个...
这样做是明智的、最佳的做法还是推荐的做法?
作为一般规则,考虑到您对较大的值集使用子查询,在语句中使用 IN 子句是完全可以接受的最佳实践。
答案应该始终是:这取决于!从您的问题中不清楚您的值列表是否是 SELECT,或者您是否会对它们进行硬编码。如果这几千个值位于另一个表(临时表或表变量)中并且您对它们进行子查询,那么性能肯定会更高。 IE。
SELECT * FROM Customer
WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
- 您正在执行的该列的索引情况如何
IN
条款上?
- 数据类型是什么?对于数字数据类型,那么您不应该有任何性能问题。
- 确保您的
STATISTICS
(如果是 SQL Server)定期更新。
- 如果数据类型是基于字符或 guid,您可能会遇到一些性能问题,特别是当您同时运行多个查询时,并且正如您所描述的,列表有数千个。
- 考虑
JOIN
相反,使用这些表;这应该总是产生更快的查询。
SELECT * FROM Customer AS C
INNER JOIN MyOtherLargeTableOfCustomers AS M
ON C.CustomerID = M.CustomerID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)