view table、join table、子查詢
先說結論
1.簡單邏輯效能 VIEW = 子查詢 = 敘述句
2.View是用來儲存查詢的SQL
JOIN、子查詢 是敘述句
所以View的效能如何是由查詢的SQL決定的(看舉例1)
3.子查詢跟JOIN實務上通常使用時機不一樣,就會導致效能的不同
硬要比較效率的話差別不大(看舉例2)
4.假如複雜邏輯的SQL推薦使用VIEW,其他時候用後兩者
(要使用哪個由商業邏輯決定)
5.沒有人在說View Table這詞,通常說View就好
最重要一點:不管簡單、複雜邏輯要查效能,請學會用"執行計畫"
--====建立測試資料====
/*
重建、檢驗資料用
delete from table_1 where 1=1;
delete from table_2 where 1=1;
select * from table_1 with (nolock);
select * from table_2 with (nolock);
*/
create table table_1 (ID int,value int);
create table table_2 (ID int,value int);
declare @i int set @i = 0;
WHILE( @i < 10000 ) --建立10000筆資料
BEGIN
insert table_1 (id,value) values (@i,@i);
select @i = @i + 1;
END;
select @i = 2000;
WHILE( @i < 5000 ) --建立2000-5000數字資料
BEGIN
insert table_2 (id,value) values (@i,@i);
select @i = @i + 1;
END;
select '新增資料成功';
--子查詢
select T100.value from table_1 T100
where T100.ID in (
select ID from table_2
);
--建立View
/*
CREATE VIEW View_Test as
select T100.value from table_1 T100
where T100.ID in (
select ID from table_2
);
*/
select * from View_Test;
可以看到結果兩個執行計畫是"一樣的"
舉例 找出table_1跟table_2兩個表格相同的資料
--子查詢
select T100.value from table_1 T100
where T100.ID in (
select ID from table_2
);
--JOIN查詢
select T100.ID,T100.value from table_1 T100
join table_2 T200 on T100.ID = T200.ID;