【发布时间】:2012-01-06 03:15:47
【问题描述】:
在数据库中有很多相同的模式,cmp01..cmpa0
每个架构都有一个users 表
每个架构的users 表的主键都有自己的唯一范围
例如,在cmp01.users 中,usr_id 在0x01000000 and 0x01ffffffff 之间。
有什么方法可以定义一个 VIEW global.users,它是每个 cmp*.union 表的联合,如果通过 usr_id 查询,优化器将前往正确的模式?
当时在想这样的事情:
create view global.users as
select * from cmp01.users where usr_id between 0x01000000 and 0x01ffffffff
union all
select * from cmp02.users where usr_id between 0x02000000 and 0x02ffffffff
....
这行得通吗?不。 EXPLAIN ANALYZE 显示所有使用的架构。
是否有一种方法可以为优化器提供良好的提示?
【问题讨论】:
-
usr_id的数据类型是什么? -
根据您的描述,您查询中的 WHERE 子句是多余的。无论如何,您将它们放在那里作为查询计划器的提示,对吗?可能有效,只需使用
EXPLAIN ANALYZE进行测试即可。 -
@ErwinBrandstetter 重新解释分析 - 好主意。需要插入一些虚拟数据并试一试。需要一段时间。
-
@ErwinBrandstetter - 不高兴。 EXPLAIN ANALYZE 按顺序遍历每个模式。
标签: sql postgresql view query-optimization