目录
- 什么是索引
1.1. 优点
1.2. 缺点 - 创建索引
- 使用索引
- 删除索引
- 在什么地方可以使用索引
- 在什么地方不使用索引
什么是索引
问:我们用字典查一个字,但是字典非常厚,我们要怎么查到我们想要查的字呢?
答:我们可以使用字典中的目录,根据目录可以快速查到我们想差的字。
我们可以把数据库系统看成一个正在查字典的人
数据表就是一本字典
索引就是字典中的目录
人想要快速的查到字不可能一页一页的找,
这里就要用到目录,通过目录可以知道这个字在哪
也就是说,索引可以提高查询速度
分类
主要有两个类型
聚集索引(clustered)
- 有序的索引(1-2-3...)
- 每个表中只能有一个
非聚集索引(nonclustered)
- 无序的索引
- 每个表可以有多个
优点
索引可以提高查询速度
缺点
- 降低了增删改执行速度(修改数据的同时还要更新索引)
当我们已经创建了两个索引
然后我们修改增加一条数据后,表中的索引会更新
创建索引
-- 语法
-- create [clustered/nonclustered] index [索引名称,一般是: index_表名_字段名] on [表名]([字段名]) [with fullfactor=x]
-- [clustered/nonclustered]: 聚集索引/非聚集索引,可选参数
-- [with fullfactor=x]: 填充因子,取值范围0-100
-- 创建一个非聚集索引
-- 假如我们已经创建了一个Student表,表内包含了StudentId、StudentName、Address等字段
create nonclustered index index_Student_StudentName on Student(StudentName)
使用索引
-- 语法
-- select * from (对应索引的表) with(index = [索引名称]) where StudentName = '张三'
select
StudentId,
StudentName,
Address
from
Student
with(index = index_Student_StudentName )
where StudentName = '张三'
其实创建好索引之后,我们并不需要显式使用它,在查询到相关的表,数据库会自动优化查询
删除索引
和删除表和类似,用drop
-- 语法
-- drop index (表名).(索引名称)
drop index Student.index_Student_StudentName
在什么地方可以使用索引
- 经常查询的字段
- 需要优化查询速度的字段
- 经常使用where语句的字段
在什么地方不使用索引
- 不经常查询的字段
- 经常修改的字段
- 字段值重复性很少的字段