重复数据的Postgres索引性能

时间:2018-08-07 10:48:31

标签: database postgresql

具有包含以下列的表格:

users

 id     |  name   | city 
--------+---------+-----------

由于同一城市中有许多用户,因此同一城市可能会出现多次。通过在其上添加索引,是否可以在重复值时获得性能优势?还是会对性能产生负面影响?

查询我正在尝试运行

SELECT DISTINCT city FROM users;

1 个答案:

答案 0 :(得分:0)

恕我直言,真正的解决方案是规范化该表并创建一个新的City表。像这样:

User
    idUser: Primary key
    Name
    City_idCity  <-- foreign key to the City table

City
    idCity: Primary key
    Name

这样,就没有索引要维护(idCity仍然是表City的主键)。要获取现有城市的列表,只需

SELECT Name FROM City

因此,您不需要DISTINCT并避免进行全表扫描。

您还将获得归一化表的其他好处。

例如New-York的城市与New York相同吗?还是NewYork?这样可以确保用户始终只能选择一个城市,而不会像在自由文本字段中那样创建重复项。