我在 Postgres 15 数据库中有一个简单的查询。没有连接或其他花哨的东西:
从 my_table 中选择 *,其中 col='val'
目的是加快查询速度。我想说我需要一个索引,但 的值col
不是唯一的。有没有什么方法可以指定非唯一索引之类的东西,或者有任何其他方法可以仅使用表结构来加速它?
我假设所有内存/缓存/硬件调整已经完成。
我在 Postgres 15 数据库中有一个简单的查询。没有连接或其他花哨的东西:
从 my_table 中选择 *,其中 col='val'
目的是加快查询速度。我想说我需要一个索引,但 的值col
不是唯一的。有没有什么方法可以指定非唯一索引之类的东西,或者有任何其他方法可以仅使用表结构来加速它?
我假设所有内存/缓存/硬件调整已经完成。
优化:
规格
该列
col
不是UNIQUE
。但只要列中的基数不是极低(意味着您的过滤器具有足够的选择性),基本的 B 树索引就会有帮助(很多):如果性能
SELECT
是您的首要目标,CLUSTER
则使用所述索引的表。看:您真的需要选择整行 (
SELECT *
),还是选择列就足够了?基本
存储:显然越快越好。
RAM:显然越多越好 - 直到您有足够的内存以便整个表可以始终驻留在缓存中。然后存储就失去了与您的查询的相关性
SELECT
。CPU:更快显然更好 - 但大多数情况下只有当您的系统接近容量时,因为 CPU 通常不是简单
SELECT
查询的瓶颈。并发负载:同一个表/数据库/服务器上的并发负载越少显然越好。(写入者不会阻止 Postgres 中的读取者。不过,写入活动可能会以各种方式阻碍读取性能。)
服务器配置:RAM 必须正确分配,成本设置和列统计信息必须有效。
表定义:以优化的顺序选择正确的数据类型。看: