比如我有这张表
Person
id: integer (primary key)
name: varchar
workplace_id: integer
我想找到在某些地方工作的人的名字,所以我使用了这个查询
SELECT name FROM Person WHERE workplace_id IN(/*values*/)
首先对值进行排序更好吗?或者对值进行排序不会对性能产生任何影响? IN
运算符的时间复杂度如何?如果排序能带来更好的性能,它是否被认为是过早的优化并且应该避免?
最佳答案
对值列表进行排序可能会造成净损失,因为排序会花费时间,而列表的排序不会影响性能。
最好的优化是在 workplace_id
上建立索引。
如果值的数量确实很大,最好使用列表值创建一个临时表并将该表与您的表连接起来。
要测试所有这些选项,请使用 EXPLAIN
和 EXPLAIN (ANALYZE)
这样数据库会告诉您它如何解决问题以及每个步骤需要多长时间。
关于arrays - IN(数组)在 PostgreSQL 中的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956642/