使用 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)
返回 sim_value
平均需要 1~1.5 分钟,这真的很长!将整个表存储在内存中的成本非常高,因为它的重量超过 10 GB)。
我怎样才能加快这个查询?你有什么建议?
P.S.:word1
和 word2
永远不会相同,所以如果对于 1 种情况:word1
是 X 和 word2
为Y,则不存在word1
为Y且word2
为X的行!
注意:我搜索过类似的主题,但都没有解决这个确切的问题。谢谢理解
谢谢
最佳答案
首先,如果您还没有,我会确保存在以下索引:
CREATE INDEX ON sim_values_english(word1, word2);
然后我会尝试以下查询:
SELECT sim_value
FROM sim_values_english
WHERE word1='X' AND word2='Y'
UNION ALL
SELECT sim_value
FROM sim_values_english
WHERE word1='Y' AND word2='X'
关于sql - 加快大型 PostgreSQL 数据库(2.5 亿行)中的 SELECT 查询响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541636/