我有一個管理記錄級權限的視圖。爲此,我們將其稱爲「AuthorityView」。它通過查看底層表,實際的「數據」,「記錄權限」表和「用戶組」表來工作。改善視圖的性能
對於本示例,我們選擇「員工」記錄。有一個核心表,「EmployeeData」包含所有數據,「EmployeeRecordAuthority」指定哪些用戶組具有對數據的訪問權限(讀取,讀取,更新,刪除等)和「用戶組」只需存儲用戶所屬的組。
該視圖使用了一個相當簡單的連接,但處理了大量記錄(〜10萬條員工記錄和〜3條記錄規範記錄)。最終結果是用戶可以查看的記錄的子集。
我遇到的問題是查詢沒有標準的視圖是非常緩慢的。大約需要6-7分鐘做一個「從EmployeeAuthorityView中選擇」,然而,應用一個「頂部」使其按預期執行。 「從EmployeeAuthorityView選擇頂部10000000 *」只需幾秒鐘。
表之間存在所有相關索引,並且已被重建。
什麼可能導致查詢速度減慢?爲什麼使用指定的「頂部」限制進行查詢更快?即使數量遠遠大於表中的記錄數量?
在此先感謝。
這是Oracle,MySQL,SQL Server還是其他RDBMS? – 2012-01-31 03:27:53