1. 程式人生 > 其它 >MySQL之索引

MySQL之索引

索引(在MySQL中也叫做“鍵(key)”)是儲存引擎用於快速找到記錄的一種資料結構。 這是索引的基本功能,除此之外,本章還將討論索引其他一些方面有用的屬性。
索引對於良好的效能非常關鍵。尤其是當表中的資料量越來越大時,索引對效能的影響愈發重要。在資料量較小且負載較低時,不恰當的索引對效能的影響可能還不明顯,但 當資料量逐漸增大時,效能則會急劇下降。
不過,索引卻經常被忽略,有時候甚至被誤解,所以在實際案例中經常會遇到由糟糕索引導致的問題。這也是我們把索引優化放在了靠前的章節,甚至比査詢優化還靠前的原因。
索引優化應該是對査詢效能優化最有效的手段了。索引能夠輕易將查詢效能提高几個數量級,“最優”的索引有時比一個“好的”索引效能要好兩個數量級。建立一個真正“最 優”的索引經常需要重寫査詢,所以,本章和下一章的關係非常緊密。

索引基礎

要理解MySQL中索引是如何工作的,最簡單的方法就是去看看一本書的“索引”部分: 如果想在一本書中找到某個特定主題,一般會先看書的“索引”,找到對應的頁碼。

在MySQL中,儲存引擎用類似的方法使用索引,其先在索引中找到對應值,然後根據 匹配的索引記錄找到對應的資料行。假如要執行下面的査詢:

mysql> SELECT first_ame FROM sakila.actor WHERE actor_id = 5;

如果在actor_id列上建有索引,則MySQL將使用該索引找到actor_id為5的行,也 就是說,MySQL先在索引上按值進行査找,然後返回所有包含該值的資料行。

索引可以包含一個或多個列的值。如果索引包含多個列,那麼列的順序也十分重要,因 為MySQL只能高效地使用索引的最左字首列。建立一個包含兩個列的索引,和建立兩 個只包含一列的索引是大不相同的,下面將詳細介紹。

如果使用的是ORM,是否還需要關心索引?

簡而言之:是的,仍然需要理解索引,即使是使用物件關係對映(ORM)工具。

(ORM)工具能夠生產符合邏輯的、合法的查詢(多數時候),除非只是生成非常基本 的查詢(例如僅是根據主鍵查詢),否則它很難生成適合索引的查詢。無論是多麼 複雜的(ORM)工具,在精妙和複雜的索引面前都是“浮雲”。讀完本章後面的內容 以後,你就會同意這個觀點的!很多時候,即使是查詢優化技術專家也很難兼顧到 各種情況,更別說(ORM)

了。