数据库索引:如何最好地索引具有名称和类别的项目?

问题描述 投票:0回答:1

我有一个 postgres 数据库,有大约 100,000 行和许多(大约 60)列。感兴趣的列是

name
category
,它们都是 varchar。

create table items
(
    id uuid,
    name varchar(256),
    category varchar(256),
    ...
)

我的应用程序经常进行以下查询

  1. select * from items where name = 'name';
  2. select * from items where category = 'category';
  3. select * from items where name = 'name' and category = 'category';

索引这些数据以最大限度提高效率的最佳方法是什么?我应该在两列上都有单个索引吗?如果是,按什么顺序?

name
category
列都不能保证是唯一的。我估计 ~1000 个类别和 ~40,000 个唯一名称。

sql database postgresql performance indexing
1个回答
0
投票

您将需要两个单独的索引。查询 1 不能使用以

category
开头的索引,查询 2 不能使用以
name
开头的索引。

查询3需要多列索引。剩下的唯一问题是向其中哪一个添加额外的列。看看哪一列更具选择性,在本例中是

name

所以你有:

(name, category)
(category)

60 列非常宽(可能太宽,是标准化不佳的标志),而且您也在做

select *
,因此关键查找是不可避免的。因此,使用
INCLUDE
列是没有意义的。


所有这些仅适用于仅执行这些查询的情况。否则需要进一步分析:也许您需要

INCLUDE
列,或者可以将其他列添加到键中。

© www.soinside.com 2019 - 2024. All rights reserved.