假设我有以下表格,填充了数百万条记录:
create table table1 (
id int not null
);
alter table table1 add constraint pk_table1_id primary key (
id asc
);
create table table2 (
t1_id int not null,
id int not null
);
alter table table2 add constraint pk_table2_t1_id_id primary key (
t1_id asc,
id asc
);
我想加入这样的表:
select
*
from
table1 t1
left join table2 t2
on t1.id = t2.t1_id
order by t1.id--, t2.id
SQL-Server(2005)生成以下执行计划:
SQL-Server正确选择merge-join-operation并取消了sort操作,因为这两个表已经使用table1的id列进行了排序。
现在,如果我取消注释order-by-clause的第二部分,它使用table2主键的第二个键,SQL-Server使用以下计划:
即使我使用merge-join-hint,SQL-Server也会在加入两个表后对数据进行排序。