小编典典

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

sql

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

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

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

id列表可以是几千个…

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


阅读 220

收藏
2021-04-28

共1个答案

小编典典

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

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

    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

2021-04-28