索引的基礎概念(一)

最近面試和不少年輕的後端聊,發現很多人做了2-3年後端,居然沒用過索引。因此下載了《High Performance MySQL》(3rd edition,即《高性能MySQL》第三版,國內中文版已出版)。摘取裏面的索引一章分開來翻譯,希望能夠對大家有所幫助。

索引(在MySQL中也稱爲鍵)是一種方便存儲引擎快速查找行的數據結構。索引是提高性能的關鍵因素,當數據表很大的時候顯得十分重要。通常,小型的數據庫即便不使用合適的索引,性能表現得也很不錯。但是隨着數據量的增加,性能將直線下降。不幸的是,索引經常被忘記或者誤解。因此,不重視索引是現實世界中性能問題的罪魁禍首。

索引優化也許是查詢性能最有力的手段,常常能夠帶來數量級的性能提升,而優化後的索引則可能在較好的索引基礎上再提升數倍的性能。但是需要注意,真正地使用上優化後的索引通常會需要你重寫查詢語句。

理解MySQL索引最簡單的方式是想象一本書的目錄。爲了找到書中講述的一個主題,你會首先從目錄找,然後目錄會告訴你具體在哪一頁。在MySQL中,存儲引擎使用索引的方式和書本目錄類似。它首先在索引數據結構中找到一個值,一旦找到匹配的索引值就可以找到匹配的數據行。例如下面的語句:

mysql>SELECT first_name FROM salila.actor WHERE actor_id = 5;

actor_id是一個索引列,因此MySQL會通過索引找到actor_id爲5的行。換言之,它首先在索引中查找匹配的值,然後再返回包含指定值的數據行。

索引可以包含數據表的一個或多個列。如果索引包含超過一個列,那查詢語句中WHERE條件列的順序很重要。因爲MySQL是按照最左匹配原則使用索引(即從最左的WHERE條件開始匹配)。在兩個列上創建一個索引和分別在兩個列創建各自獨立的索引並不相同。

使用ORM是否需要關注索引?
毫無疑問,使用ORM也需要關注索引。ORM會生成邏輯和語法正確的查詢語句,但很少會生成索引優化的查詢語句(除非是最簡單的那種查詢方式,例如主鍵查詢)。不管複雜度如何,你都不能將性能寄希望於ORM去解決索引的複雜性和巧妙性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章