索引纪录了所索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。使用索引可以加快数据查询速度、减少系统响应时间、可以使表和表之间的连接速度加快。
但是,索引的乱用可能达不到预期的效果,反而给数据库增加了负担,下面介绍一些定义索引的基本原则:
1、定义索引需要付出一定代价,使用时需要权衡利弊
创建索引和维护索引都需要花费时间与精力。当建有索引的表中的纪录又增加、删除、修改操作时,数据库要对索引进行重新调整,需要消耗服务器的资源。当表中的数据越多,这个消耗的资源也就越多。每个索引都会占用一定的物理空间。若索引多了,不但会占用大量的物理空间,而且,也会影响到整个数据库的运行性能。因此,建立索引时,需要在得与失之间进行权衡。
2、不要对查询中很少涉及的列或者重复比较多的列建立索引
在这样的字段上建立索引,不能提高查询速度,反而增加了系统维护时间和占用了系统空间,会降低数据库的整体性能。
3、对于按范围查询的列要尽量建立索引
对于需要在指定范围内快速或者频繁查询的数据列,需要为其建立索引。因为索引已经排序,其保存的时候指定的范围是连续的,查询可以利用索引的排序,加快查询时间,减少用户等待时间。
若虽然可能需要按范围来进行查询,但是,若这个范围查询条件利用的不多的情况下,最好不好采用索引。另外,对于采用范围查询时,最好能利用TOP关键字来限制一次查询的结果。可以大大的提高查询的效率。
4、为主键或外键建立索引
定义有主键的索引列,一定要为其建立索引。因为主键可以加速定位到表中的某一行。结合索引的作用,可以使得查询的速度加倍。另外,若要使得某个字段的值唯一,可以通过两种索引方式实现。一种就是上面所讲的主键索引。还有一种就是唯一索引,利用UNIQUE关键字指定字段内容的唯一性。这两种方式都会在表中的指定列上自动创建唯一索引。这两种方式的结果没有明显的区别。查询优化器不会区分到底是哪种方式建立的唯一性索引,而且他们进行数据查询的方式也是相同的。
若某张表中的数据列定义有外键,则最好也要为这个字段建立索引。因为外键的主要作用就在于表与表之间的连接查询。若在外键上建立索引,可以加速表与表之间的连接查询。
5、不要为特殊的数据类型建立索引
有些字段比较特殊。如文本字段(TXT)、图像类型字段(IMAGE)等等。如果表中的字段属于这些数据类型,则最好不要为其建立索引。因为这些字段有一些共同的特点。如长度不确定,要么很长,几个字符;要么就是空字符串。在这种类型的字段上建立索引,那根本起不了作用。相反,还增加了系统的负担。
6、索引可以跟Where语句的集合融为一体
对于经常用在Where子句中的数据列,将索引建立在Where子句的集合过程中,对于需要加速或者频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,以加快查询的时间。
总之,索引似一把双刃剑,即可以提高数据库的性能,也可能对数据库的性能起到反面作用。在具体使用过程中要做好平衡。
新闻热点
疑难解答