Я тестирую преимущества кластеризованных и некластеризованных индексов для целей обучения
Я отметил из плана выполнения, что если запрос выполняется после другого, индекс (кластеризованный или некластеризованный) не используется.
Если я ставлю 'GO' перед вторым запросом, то используется индекс.
Может кто-нибудь объяснить мне причину?
Ниже полных сценариев
create table tab_string_ind(id int identity(1,1), string varchar(10) primary key(string))
create table tab_string(id int identity(1,1), string varchar(10));
create table tab_string_uncl(id int identity(1,1), string varchar(10));
create NONCLUSTERED INDEX index_tabstrin ON tab_string_uncl(string);
go;
with cte as(
select 97 n , char(97) s
union all
select 1+n, char(1+n) from cte
where n < 122)
insert into tab_string
select t1.s+t2.s+t3.s+t4.s+t5.s from cte t1
inner join cte t2 on 1=1
inner join cte t3 on 1=1
inner join cte t4 on 1=1
inner join cte t5 on 1=1
go
insert into tab_string_ind(string) select string from tab_string
insert into tab_string_uncl(string) select string from tab_string
Скрипты, протестированные с выполнением План
select id,string from tab_string_uncl where string = 'abcdg';
select id,string from tab_string_ind where string = 'abcdg';
select id,string from tab_string where string = 'abcdg';
Если я запускаю каждый скрипт отдельно, индекс, если он существует, будет б