我有一個帶有頁面的網站,每個頁面可能屬於幾個類別。用戶被分配到類別,並且如果頁面被分配了用戶所屬的類別,則他們可以看到該頁面。針對內部查詢的sql優化
最初的每一頁屬於一類,我可以用這個表連接,並檢查權限,像這樣
where Sec.[level] > 0
現在的網頁可以有多個類別,我試圖改變SP的where語句過濾掉結果,儘管它起作用,但效率非常低。我得到的所有類別的最高權限,如果至少有一個大於零次,則訪問
WHERE
(
(TLA.RecipientTypeID = 2 and (SELECT MAX(CAST(dbo.PersonHasPermission_forSection(CS.SectionID, @pViewersID, 1) AS tinyint))
FROM CONTENT_SECTION CS
WHERE CS.ContentID = tla.RecipientID) > 0
)
OR
(TLA.RecipientTypeID <> 2 AND Sec.[level] > 0)
)
的或者是因爲只有頁面有多個貓,其他類型的內容仍然只有一個。
我不知道這裏是否有足夠的信息,但任何優化技巧將不勝感激。
該函數('dbo.PersonHasPermission_forSection(..)')是問題所在。您需要將其內聯或將其更改爲內聯表值函數。發佈它的內容,我們可以告訴你如何做到這一點。 – RBarryYoung