1.檢視(view):
http://msdn.microsoft.com/zh-tw/library/ms187956.aspx
a.生命週期 - 存在於資料庫中,可提供給所有批次或預存程序反覆使用.
b.特 點 - 如僅需使用一次,則較不適合.
c.使用時機 - 用來分解大型查詢,以便用更容易閱讀的方式加以查詢.
===============================================
2.暫存資料表(#Table):
http://msdn.microsoft.com/zh-tw/library/ms174979(v=sql.105).aspx#languageReferenceRemarksToggle
a.生命週期 - 存在多個批次或預存程序裡.
b.特 點 - 存在於"tempdb".
可建立索引(index).
當session 關閉時,#Table 將會自動DROP,但最好手動DROP.
c.使用時機 - 適合用在資料量大的查詢,有複雜計算時.
例:
CREATE TABLE #TempTable (id INT,
name VARCHAR(30)
)
INSERT INTO ...
DROP TABLE #TempTable
或
SELECT * INTO #TempTable
FROM table
WHERE ...
DROP TABLE #TempTable
===============================================
3.資料表變數(@Table):
http://msdn.microsoft.com/zh-tw/library/ms188927.aspx#code-snippet-3
a.生命週期 - 存在單次批次期間或預存程序裡.
b.特 點 - 先在記憶體運算.
c.使用時機 - 適合用在資料量少,有複雜計算時.
例:
DECLARE @TempTable TABLE (
id INT,
name VARCHAR(30)
)
INSERT INTO ...
SELECT name
FROM table AS A
INNER JOIN @TempTable B
ON A.id=B.id
===============================================
4.衍生資料表(子查詢):
a.生命週期 - 僅限於查詢期間.
b.特 點 - 如需使用多次,可能會使得查詢更難閱讀及維護.
c.使用時機 - 同樣的查詢僅使用一次時.
例:
SELECT id
FROM tableA
WHERE name=(SELECT name
FROM tableB
WHERE ... )
===============================================
5.一般資料表(CTE):
http://msdn.microsoft.com/zh-tw/library/ms175972.aspx
a.生命週期 - 僅限於查詢期間
b.特 點 - 可以減少重覆計算所耗的I/O、CPU和執行時間.
可以自我參考(遞迴),可以在同一查詢中被參考多次.
需緊接在下個查詢中才能使用.
c.使用時機 - 同樣的查詢使用多次時.
例:
;WITH TableCTE(id,dataCount) AS(
SELECT id,COUNT(id)
FROM table
GROUP BY ...
)
SELECT name
FROM table AS A
INNER JOIN TableCTE B
ON A.id=B.id
===============================================
FROM table AS A
INNER JOIN @TempTable B
ON A.id=B.id
===============================================
4.衍生資料表(子查詢):
a.生命週期 - 僅限於查詢期間.
b.特 點 - 如需使用多次,可能會使得查詢更難閱讀及維護.
c.使用時機 - 同樣的查詢僅使用一次時.
例:
SELECT id
FROM tableA
WHERE name=(SELECT name
FROM tableB
WHERE ... )
===============================================
5.一般資料表(CTE):
http://msdn.microsoft.com/zh-tw/library/ms175972.aspx
a.生命週期 - 僅限於查詢期間
b.特 點 - 可以減少重覆計算所耗的I/O、CPU和執行時間.
可以自我參考(遞迴),可以在同一查詢中被參考多次.
需緊接在下個查詢中才能使用.
c.使用時機 - 同樣的查詢使用多次時.
例:
;WITH TableCTE(id,dataCount) AS(
SELECT id,COUNT(id)
FROM table
GROUP BY ...
)
SELECT name
FROM table AS A
INNER JOIN TableCTE B
ON A.id=B.id
===============================================
Casino Bonus Code NJVIP - Promo Code for $10 & 100 Free Spins
回覆刪除Casino Bonus Code NJVIP. 포항 출장안마 Online 통영 출장샵 Casino Bonus: NJVIP: $10 & 100 Free Spins New 포항 출장마사지 Player Promo Code: 군포 출장샵 PLAYNJFREE! 순천 출장안마 No Code Required!
sq413 replica bags designer cc405
回覆刪除