具有包含以下列的表格:
users
id | name | city
--------+---------+-----------
由于同一城市中有许多用户,因此同一城市可能会出现多次。通过在其上添加索引,是否可以在重复值时获得性能优势?还是会对性能产生负面影响?
查询我正在尝试运行
SELECT DISTINCT city FROM users;
答案 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
?这样可以确保用户始终只能选择一个城市,而不会像在自由文本字段中那样创建重复项。