使用临时表替换要约 WHERE IN
我有一个用户介绍在表中需要请求的值列表。 该列表可能非常大,并且其长度在编译期间不知道。 而不是使用
, 我认为使用临时表并连接到它会更有效率。 我在另一个问题中读了这个提议 SO /我现在找不到它,但我会在我这样做的时候编辑/.
本质在于:
如果我在同一时间有两个,如果流,我不会弄错 2 尝试创建一个表 TEMP 流动后 1?
我应该不小心为表格生成一个名字 TEMP 而不是这个?
或者,如果我在交易中徘徊所有这些,那么这个名称冲突会消失吗?
它 Postgresql 8.2.
谢!
WHERE ... IN /.../
, 我认为使用临时表并连接到它会更有效率。 我在另一个问题中读了这个提议 SO /我现在找不到它,但我会在我这样做的时候编辑/.
本质在于:
CREATE TEMP TABLE my_temp_table /name varchar/160/ NOT NULL PRIMARY KEY/;
INSERT INTO my_temp_table VALUES /'hello'/;
INSERT INTO my_temp_table VALUES /'world'/;
//... etc
SELECT f.* FROM foo f INNER JOIN my_temp_table t ON f.name = t.name;
DROP TABLE my_temp_table;
如果我在同一时间有两个,如果流,我不会弄错 2 尝试创建一个表 TEMP 流动后 1?
我应该不小心为表格生成一个名字 TEMP 而不是这个?
或者,如果我在交易中徘徊所有这些,那么这个名称冲突会消失吗?
它 Postgresql 8.2.
谢!
没有找到相关结果
已邀请:
2 个回复
知食
赞同来自:
方案 pg_temp 这是一个具体的会话。 如果您在单独的会话中有一个并行运算符,它将使用另一个方案 /即使你看到他有同名/.
但是,两个笔记:
每次创建临时对象时,系统目录都会创建临时方案和对象本身。 这可能导致频繁使用的混乱。
因此,对于小套/频繁使用通常更好地坚持操作员
或者
/两者都有 Postgres 变化很好/. 也有时有用 "trick" 调度程序使用您正在寻找的任何计划使用不可变设置返回函数。
如果您决定使用临时表,则在您填满时通常更好地索引和分析它们。 否则,你比你写一段声明
.
石油百科
赞同来自:
http://www.postgresql.org/docs ... .html
它还创建一个在完成请求后被销毁的临时表。 / 交易,所以我相信并行的冲突不应该是。