sql - 加快大型 PostgreSQL 数据库(2.5 亿行)中的 SELECT 查询响应

标签 sql postgresql postgresql-performance

使用 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 查询根据定义的 word1word2 选择 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.:word1word2 永远不会相同,所以如果对于 1 种情况:word1 是 X word2为Y,则不存在word1为Yword2为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/

相关文章:

postgresql - postgres - 创建带参数的触发函数

postgresql - 如何在postgres上的级联备用服务器上进行逻辑复制?

sql - 索引 ORDER BY 与 LIMIT 1

sql - 带日期时间的 WHERE 子句的索引等

sql - 如何使用连接优化 postgresql 查询?

php - 选择在任何表中出现文本的行?

Mysql排序顺序日期0000-00-00在前

mysql - 将 iOS 应用程序中的照片存储到服务器中

sql - 如何从 SQL Server 中的多个 XML 文件读取数据?

postgresql - kubernetes pod 可以动态更改自己的标签吗?