2017-04-13 54 views
0

High Performance MySQL說索引的好處之一是「索引將隨機I/O轉換爲順序I/O」,所以我不明白怎麼做mysql索引將隨機I/O轉換爲順序I/O。mysql索引如何將隨機I/O轉換爲順序I/O

+0

什麼是'高性能MySQL'?一本書?博客?請正確引用。 – EJP

+0

一本書,由y Baron Schwartz,Peter Zaitsev,Vadim Tkachenko撰寫,請參閱鏈接http://shop.oreilly.com/product/0636920022343.do – wxweven

+0

這3個版本中哪一個是? –

回答

0

我認爲他們的意思是,當你在表中這樣的索引列可以排序你的東西很容易,因爲索引序列

+1

從這些 屬性開始有三個主要優點: 1.索引減少服務器必須檢查的數據量。 2.索引幫助服務器避免排序和臨時表。 3.索引將隨機I/O變爲順序I/O ... 因此,已經提出了分類收益,但仍然存在「索引將隨機I/O變爲順序I/O」的好處,我真的不明白如何。不管怎樣,謝謝你! – wxweven

0

覺得電話簿。假設你想查找姓氏以「S」開頭的人。你可以找到所有他們非常接近。

使用索引也有助於排序。如果您搜索姓氏以「S」開頭的所有人,並且您希望他們按姓氏排序,那麼這沒什麼問題,查詢可以按照他們在電話簿中列出的順序讀取它們,並且它們是全部存儲在一起。所以讀取是通過順序讀取完成的。

但是,如果你想讓它們按其他名稱排序,比如它們的名字,在按照你想要的順序返回它們之前,必須有一些額外的步驟來對提取的行進行排序。您想要排序的數據集可能大於內存容量,因此它必須使用臨時磁盤空間來進行排序。有很多方法可以非常高效地完成此操作,但可能需要多次傳遞,或者從數據庫中提取行時構建排序列表。

基本上,以預先排序的順序存儲行可以有效地搜索存儲在一起的值,並且有效地按照索引的順序檢索它們。

+0

「索引將隨機I/O變爲順序I/O」,這是否意味着這隻適用於主鍵?由於無法按兩個索引順序存儲數據,因此當您通過其他索引獲取數據時,您仍然需要隨機選擇I/O。希望您的回覆!非常感謝! – wxweven

+0

我同意這一點。除非你的查詢是一個「僅索引」的查詢,只需要列出你正在掃描的索引的一部分。 –