Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Arrays PostgreSQL中IN(Array)的性能_Arrays_Postgresql_Sorting - Fatal编程技术网

Arrays PostgreSQL中IN(Array)的性能

Arrays PostgreSQL中IN(Array)的性能,arrays,postgresql,sorting,Arrays,Postgresql,Sorting,例如,我有这张桌子 Person id: integer (primary key) name: varchar workplace_id: integer 我想找到在某些地方工作的人的名字,所以我使用了这个查询 SELECT name FROM Person WHERE workplace_id IN(/*values*/) 首先对值进行排序是否更好?或者对值进行排序不会对性能产生任何影响?运算符中的时间复杂度如何?如果排序提高了性能,是否认为这是一种过早的优化,应该避免?in运算符检查数

例如,我有这张桌子

Person
id: integer (primary key)
name: varchar
workplace_id: integer
我想找到在某些地方工作的人的名字,所以我使用了这个查询

SELECT name FROM Person WHERE workplace_id IN(/*values*/)

首先对值进行排序是否更好?或者对值进行排序不会对性能产生任何影响?运算符中
的时间复杂度如何?如果排序提高了性能,是否认为这是一种过早的优化,应该避免?

in运算符检查数组中的所有元素,为了提高性能,您可以将语句更改为与另一个表一起使用exist

SELECT name FROM Person a WHERE exist (select 1 from table b where b.workplace_id = a.workplace_id);

这将只检查第一个匹配项。

对值列表进行排序可能会造成净损失,因为排序需要花费时间,而列表的排序不会影响性能

最好的优化是在
workplace\u id
上建立索引

如果值的数量非常大,那么最好使用列表值创建一个临时表,并将该表与您的表连接起来

要测试所有这些选项,请使用
EXPLAIN
EXPLAIN(ANALYZE)
,这样数据库将告诉您如何解决问题以及每个步骤需要多长时间