Sql 仅仅为了在Oracle视图中搜索,是否需要为列编制索引?
假设有一个名为Sql 仅仅为了在Oracle视图中搜索,是否需要为列编制索引?,sql,database,oracle,indexing,Sql,Database,Oracle,Indexing,假设有一个名为TB_small的小表,其中包含50行,结构简单: TB_SMALL --------------- ID | NAME --------------- ...... ...... 还有另一个包含大量数据的表,称为TB_-hug,包含一百万行: TB_HUGE ------------------------------------------------------------------------ ID | FIELD 1 | TB_SMAL
TB_small
的小表,其中包含50行,结构简单:
TB_SMALL
---------------
ID | NAME
---------------
......
......
还有另一个包含大量数据的表,称为TB_-hug
,包含一百万行:
TB_HUGE
------------------------------------------------------------------------
ID | FIELD 1 | TB_SMALL_ID | FIELD 1 | ...... | FIELD n |
------------------------------------------------------------------------
......
......
因此,TB\u-SMALL
有一个外键索引到TB\u-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\u SMALL.NAME
列
*可能这不是一个好例子,因为查询可以更改为
WHERE TB_HUGE.TB_SMALL_ID EXIST (SELECT ID FROM TB_SMALL WHERE NAME="somename")
但上面的例子只是为了说明,如果与大表连接,是否有必要在小表上对列进行索引。出于性能原因,您可能不需要对其进行索引,因为整个TB_small可能适合一个或两个块,并且可以通过完全扫描与通过索引访问一样快(可能更快)。然而:
“是否有必要”不,它将在没有索引的情况下工作。是否需要良好的性能?两方面都试试。谢谢。如果连接查询中的where条件检查名称值,您认为是否也有必要为TB_SMALL.name字段放置索引?否(同样,除非这需要是唯一的,在这种情况下,应添加唯一约束,并且需要索引来支持它)。