Имеем процедуру которая обращается к таблице (student) находящейся в другой базе (testdb). Student содержит 12 миллионов records и не имеет полезного индекса.
create proc dbo.proc1
@id int,
@firstname varchar(50),
@lastname varchar(50)
as
select top 1 id from testdb.dbo.student where id=@id and firstname=@firstname and lastname=@lastname
go
Execution time: 8 sec.
Один девелопер додумался зачем то написать другую процедуру:
create proc dbo.proc2
@id int,
@firstname varchar(50),
@lastname varchar(50)
as
declare @kaka table ( id int, firstname varchar (50), lastname varchar (50))
insert @kaka values (@id, @firstname, @lastname)
select top 1 student.id from testdb.dbo.student student join @kaka kaka on
student.id=kaka.id and student.firstname=kaka.firstname and student.lastname=kaka.lastname
go
Execution time: 2 sec
Почему такая разница во времени? По идее создание temp table наоборот должно увеличить время.
Когда я смотрю в Profiler, то вижу SP:CacheMiss когда гоняется proc1.
Почему SQL оптимизатор так поступает?
-
- Новичок
- Posts: 84
- Joined: 24 Jul 2002 20:42
- Location: Chicago
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Новичок
- Posts: 84
- Joined: 24 Jul 2002 20:42
- Location: Chicago
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Новичок
- Posts: 84
- Joined: 24 Jul 2002 20:42
- Location: Chicago
трогать testdb я не имею права вообще, разрешены только selects.
Когда ко мне пришли с этим вопросом я тоже сразу сказал не тестируя что proc1 конечно же быстрее чем hash join.
На этом сервере у меня не хватает памяти, cache hit ratio 60%. Разделена ли cache на к примеру cache для joins и cache для простых selects?
Когда ко мне пришли с этим вопросом я тоже сразу сказал не тестируя что proc1 конечно же быстрее чем hash join.
На этом сервере у меня не хватает памяти, cache hit ratio 60%. Разделена ли cache на к примеру cache для joins и cache для простых selects?
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland