SQL Server 表內(nèi)容的組合的操作模式
以下的文章主要描述的是SQL Server 表內(nèi)容的組合,即 union 提高查詢速度的實(shí)際操作步驟,以下就是SQL Server 表內(nèi)容的組合,即 union 提高查詢速度的實(shí)際操作步驟的描述,希望在你今后的學(xué)習(xí)中會(huì)有所幫助。
- select ws.nodeid,wi.laststepid,wi.curstepid from Workflowinfo wi,
- Workflowstep ws where ws.workflowid=
- select ws.nodeid,wi.laststepid,wi.curstepid from Workflowinfo wi,
- Workflowstep ws where ws.workflowid=
- '402881db1b441e6f011c0cff320e4766' and (wi.laststepid =
- ws.id or (wi.curstepid = ws.id and isreceived=1 and issubmited =1))
執(zhí)行IO統(tǒng)計(jì)結(jié)果如下:
(22 行受影響)
SQL Server 表 'workflowstep'。掃描計(jì)數(shù) 1,邏輯讀取 23 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'Worktable'。掃描計(jì)數(shù) 4,邏輯讀取 1490572 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
表 'workflowinfo'。掃描計(jì)數(shù) 4,邏輯讀取 12208 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
SQL Server 表 'Worktable'。掃描計(jì)數(shù) 0,邏輯讀取 0 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
執(zhí)行計(jì)劃如下:
這里發(fā)現(xiàn):主要是嵌套循環(huán)算法占的開(kāi)銷(xiāo)***。個(gè)人感覺(jué)是“Or”引起的性能問(wèn)題,后來(lái)根據(jù)業(yè)務(wù)邏輯改寫(xiě)。如下:
語(yǔ)句修改如下:
- select ws.nodeid,wi.laststepid,wi.curstepid from Workflowinfo wi, Workflowstep ws
- where ws.workflowid='402881db1b441e6f011c0cff320e4766' and (wi.laststepid = ws.id)
- union all
- select ws.nodeid,wi.laststepid,wi.curstepid from Workflowinfo wi, Workflowstep
- ws where ws.workflowid='402881db1b441e6f011c0cff320e4766' and
- (wi.curstepid = ws.id and isreceived=1 and issubmited =1)
查詢IO次數(shù)如下:
(22 行受影響)
表 'workflowinfo'。掃描計(jì)數(shù) 36,邏輯讀取 142 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
SQL Server 表 'workflowstep'。掃描計(jì)數(shù) 2,邏輯讀取 46 次,物理讀取 0 次,預(yù)讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預(yù)讀 0 次。
執(zhí)行計(jì)劃如下:
這里發(fā)現(xiàn):成本不在是嵌套循環(huán)上的開(kāi)銷(xiāo)了,IO次數(shù)大大減少。
總結(jié):
這里通過(guò)改寫(xiě)”OR“語(yǔ)句成“Union”語(yǔ)句,性能大大提高,用了or語(yǔ)句,數(shù)據(jù)庫(kù)優(yōu)化器無(wú)法優(yōu)化,這里都是用的“嵌套循環(huán)算法”,但是使用方式不一樣,同樣得到不同的結(jié)果。
對(duì)于類(lèi)似的語(yǔ)句,可以將其改寫(xiě)成”Union“ 或”Union All“ 語(yǔ)句。
【編輯推薦】
- 對(duì)SQL Server 2000置疑的正確破解
- SQL Server 2008稀疏列與列集的經(jīng)驗(yàn)總結(jié)
- SQL Server 2008 FileStream支持“真功夫版”
- SQL Server 2005兩種快照隔離機(jī)制的不同之處
- SQL Server排序遇到NULL,不怕不帕!