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)
,这样数据库将告诉您如何解决问题以及每个步骤需要多长时间