MySQL 不能使用索引進行視圖查詢嗎?
儘管面臨著對視圖有效性的懷疑,但你面臨的問題來自於優化器無法將謂詞推送到視圖查詢中。
MySQL 單獨執行視圖查詢,在執行外部查詢之前將結果具體化在中間「派生」(MyISAM) 表中。此程序會在檢視查詢執行期間跳過對外部查詢謂詞的考慮。
解決效能問題
要提高視圖查詢的效能,請最佳化索引結構:
建立覆蓋索引:
定義一個「覆蓋」索引,其中包含視圖查詢中引用的所有欄位。在這種情況下,建立以下索引:
ON highscores (player, happened_in, score)
此索引將允許 MySQL 透過「使用索引」存取視圖查詢,並避免更昂貴的「使用檔案排序」。
評估獨立查詢:
將視圖查詢的執行計劃與具有類似目的的獨立查詢進行比較:
SELECT player , MAX(score) AS highest_score , happened_in FROM highscores WHERE player = 24 AND happened_in = 2006 GROUP BY player , happened_in
此獨立查詢也可以利用覆蓋索引,但消除了物化中間表的開銷。
結論:
MySQL 中最佳化視圖查詢的關鍵在於設計適當的索引,讓最佳化器可以利用。視圖查詢本質上是單獨的查詢,它們在被外部查詢引用之前具體化。了解這種行為對於避免在 MySQL 中使用視圖時可能出現的效能陷阱至關重要。
以上是為什麼MySQL不能使用索引進行檢視查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!