数据库基础之“索引”
数据库基础之“索引”
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
例如这样一个查询:select * from table1 whereid=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。 可见建立索引的目的是加快对表中记录的查找或排序。
进行索引的必要 www.zzzyk.com
如果在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的索引:
CREATEINDEX mytable_categoryid ON mytable (category_id);
如果有不止一个选择条件呢?例如:
SELECT* FROM mytable WHERE category_id=1 AND user_id=2;
我们首先想到的可能是,再给user_id建立一个索引。这不是一个最佳的方法。可以建立多重的索引。
CREATEINDEX mytable_categoryid_userid ON mytable (category_id,user_id);
那索引又有哪些种类呢?
一般来说分类方式不同,种类也就不同。
一般按照保存方式可以将索引分成两类,那就是顺序索引,和散列索引。顺序索引就是根据值的顺序排序的(这个文件里面的值,也就是为其建索引的字段值,是顺序的放在索引文件里面),另外一个是散列索引,就是将值平均分配到若干散列桶中,通过散列函数定位的。
其中顺序索引下面又可以分很多的类。 www.zzzyk.com
如果被索引的字段本身按照一定的顺序排序,那么这种索引叫做聚集索引。否则叫做非聚集索引。如果被索引的字段的每个值都有一个索引与其对应,那么这种索引叫做稠密索引,否则叫做稀疏索引。顺序索引分为两类,单级索引(不怎么用)和多级索引(通常是B+树,大量使用)。单级索引就是把所有的索引字段以及对应的文件位置按顺序一个个的排列出来,这种索引查找起来比较慢,因为是顺序存储的,可以使用二分查找法,但是总体来说效率不高,这种索引是最基础的索引。
如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。
散列索引
就是通过散列函数来定位的一种索引,不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
作者 张世栋