繁体   English   中英

SQL:SELECT IN更快和最佳实践?

[英]SQL: SELECT IN faster and best practice?

如果即时通讯使用2个查询:

首先:查询所需的所有键/ ID

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

id列表可以是几千...

这样做是明智的选择还是最佳实践?

通常,在语句中使用IN子句是完全可以接受的最佳实践...假设您对更大的值集使用子查询。

答案应该永远是: 取决于 从您的问题尚不清楚,您的值列表将是SELECT还是对它们进行硬编码。 如果那几千个值在另一个表(临时表或表变量)中,并且您对其进行了子查询,那肯定会更有性能。

    SELECT * FROM Customer 
    WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
  • 执行IN子句的那列的索引编制得如何?
  • 数据类型是什么? 如果是数字数据类型,那么您应该不会有任何性能问题。
  • 确保定期更新您的STATISTICS (如果是SQL Server)。
  • 如果数据类型是基于char或guid的,则可能会遇到一些性能问题,尤其是当您同时运行多个查询时,并且如您所描述的那样,列表中有数千个。
  • 考虑改为JOIN这些表; 那应该总是产生更快的查询。
SELECT * FROM Customer AS C 
INNER JOIN MyOtherLargeTableOfCustomers AS M
ON C.CustomerID = M.CustomerID

如果您的ID可在可联接表中查询,则使用内部联接应该给您最快的查询,并给您一个较小的查询以发送到数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM