為什麼MySQL不能使用索引進行檢視查詢?

Linda Hamilton
發布: 2024-11-11 04:05:02
原創
592 人瀏覽過

Why Can't MySQL Use Indexes for View Queries?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板