【发布时间】:2014-11-28 21:21:39
【问题描述】:
假设我有一个名为 customer 的表,如下所示:
+----+------+----------+-----+
| id | name | lastname | age |
+----+------+----------+-----+
| .. | ... | .... | ... |
我需要执行以下查询:
SELECT * FROM customer WHERE ((name = 'john' OR lastname = 'doe') AND age = 21)
我知道单列索引和多列索引是如何工作的,所以我创建了这些索引:
(name, age)
(lastname, age)
这就是我需要的所有索引吗?
上述条件可以改写为:
... WHERE ((name = 'john' AND age = 21) OR (lastname = 'doe' AND age = 21)
但我不确定 RDBMS 有多智能,以及这些索引是否正确
【问题讨论】:
-
为什么不对查询执行一些诊断? IE。如果您使用的是 SQL Server,请使用执行计划并查看索引是否节省成本。
-
没有将整个表放入索引中,我认为该查询无法进行太多优化
-
@Mihai 我的表有比这更多的字段......这只是一个例子。
-
@DarrenDavies 不幸的是,我没有足够的数据来测量测试......而且我不知道有任何工具可以告诉我当前是否在我的数据库模式中工作。
-
有关索引或性能的问题可能取决于您的 Postgres 版本。 始终提供。
标签: sql database postgresql indexing