Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 比较VARCHAR和其他VARCHAR的快速方法_Postgresql_Comparison_Plpgsql_Varchar - Fatal编程技术网

Postgresql 比较VARCHAR和其他VARCHAR的快速方法

Postgresql 比较VARCHAR和其他VARCHAR的快速方法,postgresql,comparison,plpgsql,varchar,Postgresql,Comparison,Plpgsql,Varchar,我在数据库中有一个遍历整个表的处理。在某些时候,我需要检查VARCHAR是否匹配列中的任何值 我想知道做这件事的最快方法是什么。每次都进行SQL比较吗?将表值检索到VARCHAR数组?另一个解决方案 表中的迭代次数超过数百万次,因此比较将进行数百万次。在匹配表中,有几百个值 那么,什么是最好的方法呢?在小表中的varchar列上有一个索引。然后查找将尽可能快。普通btree索引(默认)适用于相等运算符 CREATE INDEX smalltbl_lookup ON smalltbl(lookup

我在数据库中有一个遍历整个表的处理。在某些时候,我需要检查
VARCHAR
是否匹配列中的任何值

我想知道做这件事的最快方法是什么。每次都进行SQL比较吗?将表值检索到
VARCHAR数组
?另一个解决方案

表中的迭代次数超过数百万次,因此比较将进行数百万次。在匹配表中,有几百个值


那么,什么是最好的方法呢?

在小表中的
varchar
列上有一个索引。然后查找将尽可能快。普通btree索引(默认)适用于相等运算符

CREATE INDEX smalltbl_lookup ON smalltbl(lookup);
如果只查找某些值,这将是最快的方法:

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup)
导致索引搜索。如果查找所有值(听起来不像),则
左连接
更快:

SELECT *
FROM bigtbl b
LEFT JOIN smalltbl s USING (lookup)

将小表中的值转换为数组并在其中进行检查无法与索引搜索竞争。

我认为这是一个标准联接?您需要检查VARCHAR是否匹配表中的任何值或列中的任何值?