性能:WHERE IN 子句与(插入 + 内部连接)



我有一个用例,我需要执行大量的 SELECT SQL

目前我有两种方法:

  1. 按标识符列表查询。因此,我首先使用了 WHERE IN 子句:

    • 选择 COL1、COL2、COL3、COL4 从MAIN_TABLE 其中 COL1 IN ( 1,2,3,8,11,78,59,65,74,25,36,54558,78854,558 (
  2. 我可以创建一个表,比方说,CACHE_TABLE,然后首先通过唯一键 CACHEID 将标识符( 1,2,3,8,11,78,59,65,74,25,36,54558,78854,558 (插入其中,并将此CACHE_TABLE与 MAIN_TABLE 连接以获得所需的结果:

    • 选择MT。COL1, MT.COL2, MT.COL3, MT.COL4 从 MAIN_TABLE MT 加入CACHE_TABLE CT 在CT上。标识符 = MT。COL1 其中CT。缓存 =

在我的用例中,性能真的很关键。所以我想知道方法 #2 是否会产生比方法 #1 更好的性能。 此外,如果有更好的替代方法

提前感谢很多!!

您需要测试这两种方法。

对于单个查询,我希望在大多数情况下in获胜 - 仅仅是因为创建表然后使用它需要多次往返数据库。

此外,一些数据库优化常量列表(例如,MySQL对值进行二进制搜索而不是顺序搜索(。

对任一版本都有帮助的一件事是 (col1)(col1, col2, col3, col4) 上的索引 .

您的答案是最佳性能方法#2。 根据我的经验,IN是一个非常慢的运算符,因为SQL通常将其计算为一系列由"OR"分隔的WHERE子句(其中x=Y或x=Z或...(。 不过,与所有 SQL 一样,您的里程可能会有所不同。速度将在很大程度上取决于索引

最新更新