我有一个包含许多列和数百万行的表,如
CREATE TABLE foo (
id integer,
thing1 text,
thing2 text,
...
stuff text);
如何管理stuff
列的唯一值字典的相关性,该列最初是这样填充的:
INSERT INTO stuff_dict SELECT DISTINCT stuff from foo;
我应该手动同步(在每次插入/更新之前检查新的stuff
值是否已经存在于stuff_dict
中)还是使用触发器来插入/更新/删除foo
表。在后一种情况下,这种触发器的最佳设计是什么?
UPDATE:view不适合这里,因为SELECT * FROM stuff_dict
应该运行得尽可能快(当foo有数千万条记录时,即使CREATE INDEX ON foo(stuff)
也帮不上什么忙)。
1条答案
按热度按时间2ledvvac1#
对于大型表,示例化视图似乎是最简单的选择。
在触发器功能中刷新视图,你可以使用
concurrently
选项(见下面的注解)。虽然实体化视图的解决方案很简单,但当表
foo
频繁修改时,它可能不是最佳的。在这种情况下,使用表作为字典。索引会很有帮助。触发器函数更为复杂,应该在插入/更新/删除之后为每一行触发: