现在的位置: 首页 > 综合 > 正文

关于何时使用数据库索引

2013年09月02日 ⁄ 综合 ⁄ 共 900字 ⁄ 字号 评论关闭

转自“http://www.gootry.com/java-base/article/101010154844/396”

 

虽然使用索引的初衷是提高数据库性能,但有时也要避免使用它们。下面是使用索引的方针。

   1、索引不应该用于小规模的表。

   2、当字段用于WHERE子句作为过滤器会返回表里的大部分记录时,该字段就不适合设置索引。

 

   举例来说,图书里的索引不会包括像the或and这样的单词。

   3、经常会被批量更新的表可以具有索引,但批量操作的性能会由于索引而降低。

 

   对于经常会被加载或批量操作的表来说,可以在执行批量操作之前去除索引,在完成操作之后再重新创建索引。这是因为当表里插入数据时,索引也会被更新,从而增加了额外的开销。

   4、不应该对包含大量NULL值的字段设置索引。

   5、经常被操作的字段不应该设置索引,因为对索引的维护会变得很繁重。

 

   警告:对于特别长的关键字创建索引时要十分谨慎,因为大量I/O开销会不可避免地降低数据库性能。

   从下图可以看出,像性别这样的字段设置索引就没有什么好处。

 

   举例来说,向数据库提交如下查询:


   select * from table_name
   where gender = "FEMALE";

   何时应该避免使用索引-利用SQL索引改善性能之索引类型

   从上图可以看出,在运行上述这个查询时,表与索引之间有一个持续的行为。

 

   由于WHERE GENDER = 'FEMALE'(或'MALE')子句会返回大量记录,数据库服务程序必须持续地读取索引、然后读取表的内容、再读取索引、再读取表,如此反复。

 

   在这个范例里,由于表里的大部分数据肯定是要被读取的,所以使用全表扫描可能会效率更高。

   一般来说,当字段作为查询里的条件会返回表里的大部分数据时,我们不会对它设置索引。

 

   换句话说,不要对像性别这样只包含很少不同值的字段设置索引。这通常被称为字段的基数,或数据的惟一性。

 

   高基数意味着很高的惟一性,比如像身份号码这样的数据。低基数的惟一性不高,比如像性别这样的字段。

   提示:索引对于提高性能大有帮助,但在有些情况下也会降低性能。我们应该避免对只包含很少不同值的字段创建索引,比如性别、州名等。

抱歉!评论已关闭.