我有一个用例,我需要执行大量的 SELECT SQL
目前我有两种方法:
-
按标识符列表查询。因此,我首先使用了 WHERE IN 子句:
- 选择 COL1、COL2、COL3、COL4 从MAIN_TABLE 其中 COL1 IN ( 1,2,3,8,11,78,59,65,74,25,36,54558,78854,558 (
-
我可以创建一个表,比方说,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 一样,您的里程可能会有所不同。速度将在很大程度上取决于索引