【发布时间】:2017-11-07 01:46:03
【问题描述】:
我有一列将存储我网站用户的用户名。我注意到 PostgreSQL 中的索引功能并想使用它。什么时候真正有意义地使用它们?
我开始觉得它们应该只在搜索改变时使用。例如,您不搜索原始用户名 (SELECT * FROM table WHERE username='user'),而是搜索 (SELECT * FROM table WHERE username=(lower(user)))。这种理解正确吗?
另外,如果对上述问题的回答是肯定的,那么这是否意味着 SQL 索引默认是自己的,只有当你需要一些特殊的索引时,你才需要运行CREATE INDEX
【问题讨论】:
-
不,一般情况下 Postgres 默认不会索引任何内容。除此之外,你似乎在这里问了很多事情。 Postgres 支持常规列索引以及功能索引。因此,您的两个查询都可以从特定类型的索引中受益。
-
@TimBiegeleisen 默认不索引 PK 吗?
-
Postgres 中的 PK 应该自动为它们创建一个索引。
-
关于使用 lower(user) 我建议你阅读这个出色的答案stackoverflow.com/a/7005656/2067753
标签: sql postgresql