【发布时间】:2014-08-29 16:27:06
【问题描述】:
假设有一个名为TB_SMALL 的小表包含50 行且结构简单:
TB_SMALL
---------------
ID | NAME
---------------
......
......
还有另一个表包含大量数据,名为TB_HUGE,其中包含一百万行:
TB_HUGE
------------------------------------------------------------------------
ID | FIELD 1 | TB_SMALL_ID | FIELD 1 | ...... | FIELD n |
------------------------------------------------------------------------
......
......
所以TB_HUGE 有一个外键索引到TB_SMALL。但是,如果需要加入两个表只是为了通过特定的TB_SMALL.name 进行搜索,我认为这是一种常见的情况,就像这样
SELECT TB_HUGE.*
FROM TB_HUGE JOIN TB_SMALL ON TB_HUGE.TB_SMALL_ID=TB_SMALL.id
WHERE TB_SMALL.name = "somename";
是否需要索引TB_SMALL.NAME 列?
* 可能不是一个很好的例子,因为查询可以更改为
WHERE TB_HUGE.TB_SMALL_ID EXIST (SELECT ID FROM TB_SMALL WHERE NAME="somename")
但上面的例子只是为了说明如果与大表连接,是否需要在小表上索引列。
【问题讨论】:
-
"是否有必要" 不,它可以在没有索引的情况下工作。是否需要良好的性能?尝试两种方式。
标签: sql database oracle indexing