如何加快请求"选择"的速度?



我有一个大表(90 GB(,里面有数据:

col1     col2
----------------------
1   str1     one
2   str2     two
3   str3     three
4   str2     two
5   str1     seven
6   str4     seven
7   str3     three

col1字符变化类型,而col2则是varchar型。col1_idx索引已在col1列上创建。

为了不单独执行许多查询,如:

SELECT * FROM table_name WHERE col1='str1';

我做了一个查询来查找col1列上的匹配项,如下所示:

SELECT * FROM table_name WHERE col1 in ('str1', 'str4')

作为请求的结果,我得到:

['str1:one', 'str1:seven', 'str4:seven']

但在第一种和第二种情况下,查询的执行速度都非常慢(>20分钟(。计算机资源(处理器、内存和硬盘(几乎没有被使用。告诉我如何修复此查询调整数据库以加快col1列上搜索匹配项?我安装了PostgresQL12数据库。

UPD1:在大小为2Gb的小型数据库中执行120000行的小型查询(EXPLAIN ANALYZE SELECT(:

.....[]))">, <Record QUERY PLAN='Planning Time: 88.939 ms'>, <Record QUERY PLAN='Execution Time: 3026.371 ms'>]

通过在索引中包括其他列来使用仅索引扫描。这样,就不需要查找表了。

例如:

CREATE INDEX table_name ON table_name(col1) INCLUDE (col2);

如果col1值对";str1";以及";str4";

此外,为了减小表的大小,最好使用尽可能小的列的字符长度

最新更新