【发布时间】:2019-01-15 13:24:56
【问题描述】:
我有一个需要执行大量 SELECT SQL 的用例
我目前有两种方法:
-
通过标识符列表进行查询。所以,我首先使用了 WHERE IN 子句:
- 选择 COL1、COL2、COL3、COL4 从 MAIN_TABLE COL1 在哪里(1,2,3,8,11,78,59,65,74,25,36,54558,78854,558)
-
我可以创建一个表,比如说 CACHE_TABLE,然后首先将标识符(1,2,3,8,11,78,59,65,74,25,36,54558,78854,558)插入其中通过唯一键 CACHEID 和 JOIN 这个 CACHE_TABLE 和 MAIN_TABLE 来获得所需的结果:
- 选择 MT.COL1、MT.COL2、MT.COL3、MT.COL4 来自 MAIN_TABLE MT JOIN CACHE_TABLE CT 在 CT.IDENTIFIER = MT.COL1 其中 CT.CACHEID =
在我的用例中,性能非常重要。所以我想知道方法#2是否会比方法#1产生更好的性能。 另外,如果有更好的替代方法
非常感谢!
【问题讨论】:
-
您是否尝试过在显示执行计划的情况下运行这些查询?
-
如果您有索引,则连接应该表现良好。基本上有 3 种类型的操作:where exists (...), where col in (...) 和 join。你应该测试哪个更好。低密度和高密度情况可能会有所不同。 (一些后端在内部将 (...) 转换为 OR 查询)
标签: sql database performance join where