您的位置:首页 > 其它

添加聚集索引后高效分页查询的效率

2017-05-24 11:13 155 查看
本人使用的是sql 2012数据库

ALTER proc [dbo].[ex2](
@count int --次数
)
as
begin
declare @i int
set @i = 0
while @i < @count
begin
SELECT * FROM product0
WHERE
[bName] like  '%23%'
Order by grade desc,createTime desc OFFSET 4 ROWS FETCH NEXT 3 ROWS ONLY ;
set @i = @i + 1
end
end


100次 用时82秒,通过为grade添加聚集索引,用时 84秒

GO
ALTER proc [dbo].[ex3](
@count int --次数
)
as
begin
declare @i int
set @i = 0
while @i < @count
begin
SELECT * FROM product0 w1
WHERE id in
(
SELECT top 3 id FROM
(
SELECT top 7 ID, grade,createTime FROM product0 where [bName] like  '%23%' and
[pName] like  '%%' and
[find0] like  '%%' and
[find1] like  '%%' ORDER BY grade desc
) w order by grade,createTime DESC
) order by grade desc,createTime DESC
set @i = @i + 1
end
end


100次 用时86秒,通过为grade添加聚集索引,用时 7秒

查询1000的后三条数据,效率比较

GO
ALTER proc [dbo].[ex1](
@count int --次数
)
as
begin
declare @i int
set @i = 0
while @i < @count
begin
SELECT * FROM product0 w1,
(
SELECT TOP 3 id FROM
(
SELECT TOP 1000 id, grade,createTime FROM product0
where
[bName] like  '%23%' and
[pName] like  '%%' and
[find0] like  '%%' and
[find1] like  '%%'
ORDER BY grade DESC
) w ORDER BY grade ASC
) w2 WHERE w1.id = w2.id ORDER BY w1.grade DESC, w1.createTime desc
set @i = @i + 1
end
end


100次,添加gradle聚集索引,用时9秒

GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[ex3](
@count int --次数
)
as
begin
declare @i int
set @i = 0
while @i < @count
begin
SELECT * FROM product0 w1
WHERE id in
(
SELECT top 3 id FROM
(
SELECT top 1000 ID, grade,createTime FROM product0 where [bName] like  '%23%' and
[pName] like  '%%' and
[find0] like  '%%' and
[find1] like  '%%' ORDER BY grade desc
) w order by grade
) order by grade desc,createTime DESC
set @i = @i + 1
end
end


100次,添加gradle聚集索引,用时9秒

GO
ALTER proc [dbo].[ex2](
@count int --次数
)
as
begin
declare @i int
set @i = 0
while @i < @count
begin
SELECT * FROM  (
SELECT TOP 3 * FROM (
SELECT TOP 1000 * FROM product0
where [bName] like  '%23%' and
[pName] like  '%%' and
[find0] like  '%%' and
[find1] like  '%%'
ORDER BY grade DESC
) f
ORDER BY f.grade ASC
) s ORDER BY s.grade DESC ,s.createTime Desc
set @i = @i + 1
end
end


100次,添加gradle聚集索引,用时4秒

go
execute sp_helpindex @objname = 'product0'  --查看索引
go
drop index product0.CLUSTER_id;  --删除索引
go
CREATE CLUSTERED INDEX CLUSTER_id ON product0(grade) --创建索引


本人通过添加和删除聚集索引发现:使用SQL server 2012提供的 OFFSET 4 ROWS FETCH NEXT 3 ROWS ONLY 的查询语句,在速率上没有明显的提示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  分页 select