数据库索引
优点:
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
普通查询,必须遍历整张表,知道找到该值,如果在该列上建立了索引,即可在索引中查找,由于索引是经过算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
缺点:
一是增加了数据库的存储空间,二是插入和修改数据时要花费较多的时间,因此,索引也要随之改动,降低了数据的维护速度。数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录。
索引分类:
聚集索引,非聚集索引。
举个例子,字典前面的目录,可以按照拼音和部首去查询。而拼音查询费就是聚集索引,部首查询法就是非聚集索引。
所以,聚集索引存储记录在物理上连续存在,而非聚集索引在逻辑上是连续的。
另外,聚集索引一个表只能有一个,非聚集索引一个表可以有多个。
索引查询:
无索引的表,查询时,按照顺序查看的方式来扫描每条记录,这样小非常底下。聚集索引和非聚集索引的区别是,表记录的排列顺序和索引的排列顺序是否一致。
建立索引原则:
1 定义主键的数据列一定要建立索引。
2 定义有外键的数据列一定要建立索引。
3 对于经常查询的数据列最好建立索引。
4 对于需要在指定范围内的快速查询的数据列
5 经常用在where字句中的数据列。
6 经常出现在关键字order by group by distinct后面的字段
7 很少查询或者重复值较多的列不要建立索引
8 对于数据类型text,image,bit的数据类型的列不要建立索引。
9 经常存取的数据列不要建立索引。
10 表上的索引数目要有所限制。
创建索引:
非聚集索引:
CREATE INDEX mycolumn_index ON mytable (myclumn)
默认为非聚集索引。
聚集索引:
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)
注意一个表中只能有一个聚集索引,建立主键时就会创建主键索引,即聚集索引,所以创建了主键,就不能再创建聚集索引了。
删除索引:
DROP INDEX table_name.index_name[,table_name.index_name]