数据库索引

  索引分为聚簇索引非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

 

   适合建立索引的列:

    1. 在经常需要搜索(where语句)的列上,可以加快搜索的速度   

    2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构

    3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度

    4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的

    5. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间

 

  不适合建立索引的列:

    1. 在查询中很少使用或者参考的列

    2. 只有很少数据值的列。由于这些列的取值很少,例如性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。   

    3. 定义为text, image和bit数据类型的列。这些列的数据量要么相当大,要么取值很少,不利于使用索引。   

    4. 当修改性能远远大于检索性能时,不应该创建索引。因为修改性能和检索性能是互相矛盾、此消彼长的。

   

  建立索引的负面影响:

    1. 增加了数据库的存储空间

    2. 在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

  

  索引的类型:

    1. 唯一索引:不允许其中任何两行具有相同索引值。   

    2. 主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型,主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。   

    3. 聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。

    一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

 

    SELECT * FROM mytable WHERE category_id=1;

    建立索引:CREATE INDEX mytable_categoryid ON mytable (category_id);

    SELECT * FROM mytable WHERE category_id=1 AND user_id=2;

    建立多重索引:CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

posted @ 2012-06-05 10:09  hi_bazinga  阅读(258)  评论(0编辑  收藏  举报