关于何时使用数据库索引

本文探讨了索引在数据库性能优化中的应用与限制,包括不适合设置索引的情况,如小规模表、频繁批量更新的表及包含大量NULL值的字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自“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')子句会返回大量记录,数据库服务程序必须持续地读取索引、然后读取表的内容、再读取索引、再读取表,如此反复。

 

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


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

 

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

 

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值