Индекс не используется, если запрос выполняется после другого - PullRequest
0 голосов
/ 08 января 2020

Я тестирую преимущества кластеризованных и некластеризованных индексов для целей обучения

Я отметил из плана выполнения, что если запрос выполняется после другого, индекс (кластеризованный или некластеризованный) не используется.

Если я ставлю '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';

enter image description here

Если я запускаю каждый скрипт отдельно, индекс, если он существует, будет б

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...