iT邦幫忙

0

比較view table、join table、子查詢的差異?

使用view table、join table、子查詢,三者哪個效率高,對db的資源消耗較低?

石頭 iT邦研究生 3 級 ‧ 2018-03-09 09:41:57 檢舉
你的問題太發散了....

三者哪個效率高,對db的資源消耗較低
你是指記憶體消耗低還是硬體儲存容量少??
wiseguy iT邦超人 1 級 ‧ 2018-03-09 10:29:13 檢舉
這種看來可以寫一份報告的問題,是作業吧?
教授出這種提目是讓你思考,可以從哪些方面來做比較,或是自己動手設計比較方法。重點其實不是答案,因為教授不可能不知道答案。你連想都不想就丟上來這裡,不太好喔~
不是什麼報告,純粹想知道,實際應用該用什麼比較適合~
是指記憶體和CPU消耗,儲存容量就現在的環境來說問題較小吧~

1 個回答

2
暐翰
iT邦大師 1 級 ‧ 2018-03-09 10:55:47
最佳解答

問題:

view table、join table、子查詢

回答:

先說結論
1.簡單邏輯效能 VIEW = 子查詢 = 敘述句
2.View是用來儲存查詢的SQL
JOIN、子查詢 是敘述句
所以View的效能如何是由查詢的SQL決定的(看舉例1)
3.子查詢跟JOIN實務上通常使用時機不一樣,就會導致效能的不同
硬要比較效率的話差別不大(看舉例2)
4.假如複雜邏輯的SQL推薦使用VIEW,其他時候用後兩者
(要使用哪個由商業邏輯決定)
5.沒有人在說View Table這詞,通常說View就好

最重要一點:不管簡單、複雜邏輯要查效能,請學會用"執行計畫"


舉例1:

--====建立測試資料====
/*
重建、檢驗資料用
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;

查詢結果:

可以看到結果兩個執行計畫是"一樣的"


舉例2:

舉例 找出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;

看更多先前的回應...收起先前的回應...

所以實際情況應該用哪個好? 把會join或子查詢的資料,建立viewtable,透過viewtable查詢?
還是在程式中再寫join或子查詢? 另外join和子查詢哪個效率高?/images/emoticon/emoticon10.gif

暐翰 iT邦大師 1 級 ‧ 2018-03-09 11:08:18 檢舉

更新內容了

把會join或子查詢的資料,建立view,透過view查詢?還是在程式中再寫join或子查詢?哪種方式比較適合?/images/emoticon/emoticon13.gif

暐翰 iT邦大師 1 級 ‧ 2018-03-09 11:17:29 檢舉

問題:

把會join或子查詢的資料,建立view,透過view查詢?

回答:

會,通常想要由DB統一管理、想重複使用、想管理權限,這時候建立View
複雜邏輯寫View,簡單邏輯不值得寫VIEW

問題:

還是在程式中再寫join或子查詢?哪種方式比較適合?

回答:

DB不夠強,先撈取基本資料,把複雜運算邏輯寫在程式,可以減輕資料庫負擔
DB,SQL能力夠強寫在DB

/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答