【发布时间】:2013-09-22 11:26:34
【问题描述】:
我需要在一张桌子上运行多个(很多!)选择(显然是简化的):
libraries_books
---------------
id
library_id
book_id
我将在同一个library_id 上寻找不同的book_id。
现在,我知道临时表了:
SELECT id, book_id INTO TEMPORARY tmp_books where library_id=?
然后可以选择在tmp_books 上添加索引并在其上运行查询而不是libraries_books,但我感觉还有另一种方法可以以更高效的方式实现这一目标。有吗?
【问题讨论】:
-
你在这里实际上没有问题。
-
除了
(library_id, book_id)上的单个索引之外,您实际需要多少额外性能? -
那张桌子上的那些“多重选择”是什么?您确定不能将其组合成一个语句吗?使用临时表来做类似的事情听起来有点奇怪。
-
我用问题编辑了问题 :) 我还删除了关于 upsert 的多余信息,但谢谢你……桌子会变得非常大,我要做数万
select一次就在上面(复杂的导入脚本),-并且一些查询也基于其他列(除了book_id),所以性能是 一个问题。此外,这是我经常遇到的一种普遍问题,只是认为会有一个我不知道的解决方案。 -
Postgres 8.4 将于明年年中取消支持,因此无论如何您都应该尽快计划升级。也许是提前升级并使用可写 CTE 的好理由
标签: sql postgresql optimization query-optimization