我已經創建了下面的表,並通過執行下面的語句插入20K記錄:爲什麼剖析器在第一次執行時總是讀取更高的值,以及如何降低它?
create table Testing
(
col1 int,
col2 varchar(50),
col3 bit,
col4 int,
col5 varchar(50),
col6 bit);
declare
@flag bit = 1,
@count int
while @flag = 1
begin
set @count = (Select count(*) from Testing);
if (@count = 20000)
begin
set @flag = 0;
end
else
begin
insert into Testing values(100, 'Testing', 1, 100, 'Testing', 1)
end
end
然後執行下面的查詢的6倍:
select * from testing
where col2 = 'Testing'
探查顯示276讀取用於第一執行其餘五個人則爲135人。
我不知道爲什麼它採取高讀取第一次,如何降低讀取首次。
注:我執行了DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE;在每次執行之前。
第一次必須從磁盤讀取頁面。如果您在col2上有索引,您可能會獲得更好的結果。檢查執行計劃。 – rene
我在每次執行前都清除了緩衝區和緩存。 – Prakash
我不是100%確定的,但我認爲如果你把它作爲一個存儲過程,它可能會在第一次被命中時更快。我認爲執行計劃是兌現或類似的。 –