【发布时间】:2016-09-18 02:24:04
【问题描述】:
使用 PostgreSQL,我有一个非常大的表,大约有 2.5 亿行,由以下 4 个属性组成:
CREATE TABLE public.sim_values_english
(
id bigint NOT NULL DEFAULT nextval('sim_values_english_id_seq'::regclass),
word1 character varying(255),
word2 character varying(255),
sim_value double precision,
CONSTRAINT pk_sim_values_english PRIMARY KEY(id)
)
我正在尝试使用以下 SELECT 查询根据定义的 word1 和 word2 选择 sim_value 属性:
(假设我有 2 个单词:X 和 Y,其中 X 或 Y 可以属于 word1 或 word2)
SELECT sim_value
From public.sim_values_english
Where (word1='X' or word2='X') and (word1='Y' or word2='Y') and (word1!=word2)
这平均需要 1~1.5 分钟才能返回 sim_value,这真的很长!将整个表存储在内存中的成本非常高,因为它的重量超过 10 GB)。
如何加快查询速度?你有什么建议?
P.S.:word1 和 word2 永远不会相同,所以如果对于 1 种情况:word1 是 X 并且 word2 是 Y,那么不存在 @987654333 的另一行@ 是 Y 并且 word2 是 X!
注意:我搜索了类似的主题,但没有一个解决了这个确切的问题。谢谢理解
谢谢
【问题讨论】:
-
你对 word1 和 word2 有索引吗?
-
@Sylwit 不,我不知道,因为这些属性特定于该表,并且独立于我数据库中的所有其他表。
-
“这些属性特定于该表并且独立于我数据库中的所有其他表”这一事实与您是否应该对它们建立索引的问题绝对无关。
-
在答案底部创建索引并以stackoverflow.com/questions/39292297/…的值加入
标签: sql postgresql postgresql-performance