MySQL索引的三星評估(three-star system)

來源:互聯網
上載者:User

標籤:

在《高效能MySQL》中文第三版提到了索引的評估:三星評估(three-star system)。

在《High Performance MySQL (3rd Edition)》英文第三版的原文是:

Lahdenmaki and Leach’s book also introduces a three-star system for grading how suitable an index is for a query.
The index earns one star if it places relevant rows adjacent to each other, 
a second star if its rows are sorted in the order the query needs,
and a final star if it contains all the columns needed for the query.

這段話理解起來很費解,第三版的中文翻譯也不好理解:

索引將相關的記錄放到一起獲得一星;

如果索引中的資料順序和尋找中的排列順序一致獲得兩星;

如果索引中的列包含了查詢中需要的全部列則獲得三星;

個人表示中文和英文都很理解(難道語文和英語都是數學老師教的,^...^)。

我對此提出了深深的疑問:

一星:相關的記錄指的是什嗎??(相關這個詞很深奧,“相關部門”是什麼部門)

二星:如果建立了B-Tree(B+Tree)索引,資料就有序了。
三星:索引的列包含了查詢需要所有的列?根本不需要在where查詢條件所有的列上建立索引!

我認為一星和二星的rows應該是columns,索引不關具體的資料行,只與查詢的列有關。這樣也與High Performance MySQL 後面提到的多列索引的觀點相符合,特別是二星評估。

個人的觀點:

評估一個索引是否適合某個查詢的“三星系統”(three-start system):
一星:索引將相關的列放到一起,即在一系必要的列上建立索引,不必為在where條件裡面的列都建立索引。 
二星:索引中的資料列順序和尋找中排列順序一致。通常將選擇性最高的列放到索引的最前列。
三星:索引中的列包含了查詢中需要的全部列。索引包含查詢所需要的資料列,不再進行全表查表(聚簇索引、覆蓋索引)。

 

參考資料:

《高效能MySQL》中文第三版

《High Performance MySQL (3rd Edition)》英文第三版


MySQL索引的三星評估(three-star system)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.