【发布时间】:2015-12-15 07:33:54
【问题描述】:
假设我的表中有数百万行。该表在 id 列上具有主键(pk 在 postgresql 中默认为索引)。
该表还有一些额外的列,如year、name、phone 和其他内容。
我想按 id 或一组 id 和 year 这样的列查找行:
SELECT *
FROM mytable
WHERE year = '1996' AND id = 123123
或类似:
SELECT *
FROM mytable
WHERE year = '1996' AND id IN (123123, 456456, 789789)
如果我在id 上有主键,我应该在year 列上创建索引吗?对于这种情况,哪种索引更有效?
如果我的表中只有两年(例如 1996 年和 1997 年),如果我在 year 列上创建索引会更好吗?
【问题讨论】:
-
不要比较数字和字符串。
'1996'是字符串值,而不是数字。如果您不使用与列的数据类型匹配的常量值,则某些 DBMS 可能不会使用索引查找(尽管对于“数百万”行中的两个不同年份,无论如何都很难选择索引)。 -
这适用于哪个 RDBMS?请添加标签以指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或者完全是其他东西。
标签: sql postgresql indexing