--
-索引视图
索引视图是具体化的视图
--
创建索引视图
create
view
视图名
with
schemabinding
as
select
语句
go
--
-创建索引视图需要注意的几点
1
. 创建索引视图的时候需要指定表所属的架构
--
错误写法
create
view
v_f
with
schemabinding
as
select
a.a,a.b,b.a,b.b
from
a
join
b
on
a.id
=
b.id
go
--
-正确写法:
create
view
v_f
with
schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a
join
dbo.b
on
a.id
=
b.id
go
2
.在创建索引视图的select语句时,不使用
*
,必须指定具体的列名
--
错误写法
create
view
v_f
with
schemabinding
as
select
*
from
dbo.a
join
dbo.b
on
a.id
=
b.id
go
--
-正确写法
create
view
v_f
with
schemabinding
as
select
a.a,a.b,b.a,b.b
from
dbo.a
join
dbo.b
on
a.id
=
b.id
go
3
.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了
4
. 只能为索引视图创建唯一聚集索引
--
正确的写法
create
unique
clustered
index
ix_uniquetb
on
v_tb
go
--
错误的写法
create
clustered
index
ix_uniquetb
on
v_tb
go
--
-使用索引优化数据库查询效率
1
.不宜创建索引的情形(
1
)经常插入,修改和删除的表(
2
)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间
2
.适合创建索引的情形(
1
)为where子句中出现的列创建索引(
2
)创建组合索引(
3
)为group
by
子句中出现的列创建索引
3
.聚集索引的设计原则(
1
)该列的数值是唯一的或者很少有重复的记录(
2
)经常使用between ...
and
..按顺序查询的列(
3
)定义identity的唯一列.(
4
)经常用于对数据进行排序的列.
--
-无法使用索引的select语句
1
.对索引列使用了函数,如:
select
*
from
tb
where
max
(id)
=
100
2
.对索引列使用了
'
%xx
'
,如:
select
*
from
tb
where
id
like
'
%1
'
需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如
select
*
from
tb
where
id
like
'
1%
'
就可以使用索引
3
.在where子句中对列进行类型转换(其实也是使用到了函数)
4
.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;
select
*
from
tb
where
id
=
'
1
'
and
col1
=
'
aa
'
select
id,
sum
(col1)
from
tb
group
by
id
select
*
from
tb
where
id
=
'
2
'
and
col2
=
'
bb
'
则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序
5
.在where 子句中使用in关键字的某些句子当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引如:
select
*
from
ta
where
id
in
(
select
id
from
tb
where
....)
--
这样可以用到索引
select
*
from
tb
where
id
in
(
'
1
'
,
'
2
'
)
索引视图
最新推荐文章于 2024-07-30 15:22:33 发布