|
Без ключа:
1 запрос:
2 запрос:
3 запрос:
По сравнению с тем, что было в первый раз записи стали располагаться в другом порядке, хотя я удаляла и заново создавала и заполняла таблицу. Чтобы не осталось упорядочивание после применения индексов в прошлый раз.
Кластерный индекс FInt1:
1 запрос:
2 запрос:
3 запрос:
Кластерный индекс FInt1 + 2 некластерных:
Пока выполняла обнаружила, что у меня в прошлый раз индекс был по FDate2, а запрос по FDate1 – исправила, но это ничего не поменяло в результате:
2 запрос:
3 запрос:
Кластерный индекс FStr1 + 3 некластерных индекса:
Так же были сделаны ключи не по тем полям – исправила. Результат есть!
1 запрос:
2 запрос:
3 запрос:
И даже получился тот «скачек» времени, который не получился в первый раз. Табличка:
Запрос | Без ключа | Ключ FInt1 | Ключ FInt1 + некласт. индекс | Ключ FStr1 + некласт. индекс |
4.А (по FInt1) | 0:16 | 0:02 | - | 0:01 |
4.Б (по FChar2) | 0:16 | 0:15 | 0:05 | 0:15 |
4.В (по FDate1) | 0:17 | 0:17 | 0:17 | 0:23 |
Но возник вопрос, почему время на выполнение запросов без ключей уменьшилось в 2 раза? Ведь я специально удаляла все и создавала снова, чтобы не оставалось упорядочивания с предыдущих попыток. К тому же, заполнение таблицы в этот раз составило всего 4:45, а в прошлый раз более 11 минут. Как так?
Код:
create table T1
(
FInt1 int not null,
FInt2 int,
FChar1 nchar(6) not null,
FChar2 nchar(6),
FStr1 nvarchar(500) not null,
FStr2 nvarchar(500),
FDate1 datetime not null,
FDate2 datetime,
FDec1 decimal(18,6) not null,
FDec2 decimal(18,6)
)
if exists (select *
from dbo.sysobjects
where id=OBJECT_ID(N'FillTable') and OBJECTPROPERTY(id,N'isProcedure')=1
)
drop proc Filling
go
create proc Filling
as
declare @i int=0
declare @i2 int
declare @str nvarchar(200)=''
declare @date datetime='15-09-2012'
while @i<200
begin
set @str=@str+'0'
set @i=@i+1
end
set @i=0
while @i<1000000
begin
set @i2=@i%10000
insert T1
select @i,
@i2,
@i,
@i2,
@str+CAST(@i as nvarchar(7)),
@str+CAST(@i2 as nvarchar(7)),
DATEADD(s,@i,@date),
DATEADD(s,@i2,@date),
CAST(@i as float)/10000,
CAST(@i2 as float)/10000
set @i=@i+1
end
exec Filling
DBCC SHRINKDATABASE (db4, 0)
create clustered index FirstKey
on T1(FDec1)
drop index FirstKey on T1
drop index SecondKey on T1
create nonclustered index SecondKey
on T1(FInt2)
create nonclustered index SecondKey
on T1(FChar2)
with (DROP_EXISTING = ON)
create nonclustered index SecondKey
on T1(FStr2)
with (DROP_EXISTING = ON)
create nonclustered index SecondKey
on T1(FDate2)
with (DROP_EXISTING = ON)
create nonclustered index SecondKey
on T1(FDec2)
with (DROP_EXISTING = ON)
DBCC SHRINKDATABASE (db4, 0)
sp_spaceused
select *
from T1
where FInt1>1000000-1001
select *
from T1
where FChar2 in (1, 10, 100, 1000, 10000, 99999, 9999, 999, 99, 9)
select *
from T1
where DATEPART(HH, FDate1)=12
create clustered index FirstKey
on T1(FInt1)
create nonclustered index SecondKey
on T1(FChar2)
create nonclustered index ThirdKey
on T1(FDate1)
drop index FirstKey on T1
drop index SecondKey on T1
drop index ThirdKey on T1
create clustered index FirstKey
on T1(FStr1)
create nonclustered index SecondKey
on T1(FChar2)
create nonclustered index ThirdKey
on T1(FInt1)
create nonclustered index FourthKey
on T1(FDate1)
drop index FirstKey on T1
drop index SecondKey on T1
drop index ThirdKey on T1
drop index FourthKey on T1
Дата добавления: 2015-08-28; просмотров: 34 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Где найти «правильных» новичков? | | | По сравнению с тем, что было в первый раз записи стали располагаться в другом порядке, хотя я удаляла и заново создавала и заполняла таблицу. Чтобы не осталось упорядочивание после применения |