SQL——索引

版权声明:最终解释权归属Hern所有,恒! https://blog.csdn.net/qq_36761831/article/details/83755337

索引

可以在表中创建索引,以便更加快速高效地查询数据,并且用户无法看到索引,它们只能被用来加速搜索/查询(在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据)。

SQL索引有两种,聚集索引和非聚集索引。

注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

语法

CREATE [UNIQUE][CLUSTERED | NONCLUSTERED]  INDEX  索引名称  

ON {表名称 | 视图名称} [WITH [index_property [,....n]];


UNIQUE: 建立唯一索引。

CLUSTERED: 建立聚集索引。

NONCLUSTERED: 建立非聚集索引。

Index_property: 索引属性。

UNIQUE索引既可以采用聚集索引结构,也可以采用非聚集索引的结构。

若不指明采用的索引结构,则数据库管理系统默认为采用非聚集索引结构。

索引的存储机制

    无索引的表,查询时,是按照顺序存续的方法扫描每个记录来查找符合条件的记录,即按照从头到尾的顺序进行查找,知道找到为止,这样效率十分低下。

       聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引就是在数据库被开辟一个物理空间存放他的排列的值,例如1-100,所以当插入数据时,会重新排列整个整个物理空间。

       聚集索引就是搜索顺序按照顺序(1,2,3,4,5,6,7……或是A~Z的顺序)进行查询搜索。

       非聚集索引:例如,就和按照部首查询是一样是,可能按照偏房查询的时候,根据偏旁‘弓’字旁,索引出两个汉字,张和弘,但是这两个其实一个在100页,一个在1000页,他们的索引顺序和数据库表的排列顺序是不一样的,这个样的就是非聚集索引。非聚集索引其实可以看作是一个含有聚集索引的表,只仅包含原表中非聚集索引的列和指向实际物理表的指针,只记录一个指针,其实就有点和堆栈差不多的感觉了

建立索引的原则:

1) 定义主键的数据列一定要建立索引。

2) 定义有外键的数据列一定要建立索引。

3) 对于经常查询的数据列最好建立索引。

4) 对于需要在指定范围内的快速或频繁查询的数据列;

5) 经常用在WHERE子句中的数据列。

6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

8) 对于定义为text、image和bit的数据类型的列不要建立索引。

9) 对于经常存取的列避免建立索引 

9) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

10) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

猜你喜欢

转载自blog.csdn.net/qq_36761831/article/details/83755337