1.อันดับแรก ลองตรวจสอบดูว่า table personnel ได้สร้าง Index ด้วย Field ที่ใช้ Link ไปยัง Table อื่นๆ ไว้ใหม ถ้าไม่ต้องสร้างด้วยครับ
2.แบ่ง Join ครั้งละ 2-3 Table จะดีกว่า หรือ ใช้เป็น Left Outer Join แทน Inner Join
3. Sample
Code (SQL)
;With Trans1 As
(
Select pn.PersonId,pn.TPrefixname,pn.TName,pn.TLastname,Isnull(ps.PositionId,'')PositionId,
Isnull(ps.Main,'')Main
From Personnel pn Left Outer Join PositionId ps On (pn.PersonId=ps.PersonId)
Where pn.PersonId=@parameter
And ps.Main=true
),Trans2 As
(
Select ts.PersonId,ts.TPrefixname,ts.TName,ts.TLastname,ts.PositionId,ts.Main,
Isnull(st.Section,'')Section
From Trans1 ts Left Outer Join Section st On (ts.PositionId=st.PositionId)
),Trans3 As
(
Select ts.PersonId,ts.TPrefixname,ts.TName,ts.TLastname,ts.PositionId,ts.Main,
ts.Section,Isnull(dt.Dept,'')Dept
From Trans2 ts Left Outer Join Description dt On (ts.PositionId=dt.PositionId)
),Trans4 As
(
Select ts.PersonId,ts.TPrefixname,ts.TName,ts.TLastname,ts.PositionId,ts.Main,
ts.Section,ts.Dept,Isnull(wt.startdate,'1900-01-01')startdate,Isnull(wt.main,'')Expr1
From Trans3 ts Left Outer Join Startworking wt On (ts.PositionId=wt.PositionId)
Where wt.main=false
),Trans5 As
(
Select ts.PersonId,ts.TPrefixname,ts.TName,ts.TLastname,ts.PositionId,ts.Main,
ts.Section,ts.Dept,ts.startdate,ts.Expr1,Isnull(tr.TrainingNo,'')TrainingNo,
Isnull(tr.Notes,'')Notes
From Trans4 ts Left Outer Join TrainingResult1 tr On (ts.PositionId=tr.PositionId)
)
Select *
From Trans5