为查询创建索引

时间:2015-08-14 07:13:10

标签: sql oracle

我有一个表Person,其中包含两列NameGender,并假设我的应用程序中有一个经常调用的查询:

select * from Person where Gender = 'M'

因此,建议在列Gender上创建索引吗?

2 个答案:

答案 0 :(得分:1)

这是不可取的,除非有一个只有少数另一个,你的查询只看少数。全表扫描会比通过索引潜水获得更有效的结果。事实上,即使你创建了索引,优化者也不太可能使用它。

答案 1 :(得分:0)

以下几点可能会给你一个想法:

来自Documentation

  

通常,索引访问路径对于检索表行的一小部分子句的语句更有效,而全表扫描在访问表的大部分时更有效。

     

不要索引经常修改的列。修改索引列的UPDATE语句和修改索引表的INSERT和DELETE语句比没有索引的时间要长。此类SQL语句必须修改索引中的数据以及表中的数据。它们还会生成其他撤消和重做。

     

在选择索引键时,请考虑查询的性能增益是否值得INSERT,UPDATE和DELETE的性能损失以及使用存储索引所需的空间。您可能希望通过比较带有和不带索引的SQL语句的处理时间来进行实验。您可以使用SQL跟踪工具来测量处理时间。