標籤:
索引用於快速找出在某列中有一特定值的行。
如果不實用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行。
表越大,查詢資料所花費的時間越多。
如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋資料檔案,而不必查看所有的資料。
內容導航
瞭解什麼是索引
掌握建立索引的方法和技巧
熟悉如何刪除索引
掌握綜合案例中索引建立的方法和技巧
熟悉操作索引常見的問題
索引簡介
索引是對資料庫表中一列貨多列的值進行排序的一種結構,使用索引可提高資料庫中特定資料的查詢速度。
索引的含義和特點
索引是一個單獨的、儲存在磁碟上的資料庫結構,它們包含著對資料表裡所有記錄的引用的指標。使用索引用於快速找出在某個或多個列中有一特定值的行,所有MySQL列類型都可以被索引,對相關列使用索引是提高查詢操作速度的最佳途徑。
例如:資料庫中有2萬條記錄,現在要執行這樣一個查詢:select * from table where num=10000。如果沒有索引,必須遍曆整個表,直到num等於10000的這一行被找到為止;如果在num列上建立索引,MySQL不需要任何掃描,直接在索引裡面找10000,就可以得知這一行的位置。可以,建立索引可以提高資料庫的查詢速度。
索引是在儲存引擎中實現的,因此每種儲存引擎的索引都不一定完全相同,並且每種儲存引擎也不一定支援所有的索引類型。根據儲存引擎定義每個表的最大索引數和最大索引長度。所有儲存引擎支援每個表至少16個索引,總索引長度至少為256位元組。大多數儲存引擎有更高的限制。MySQL中索引的儲存類型有兩種:BTREE和HASH,具體和表的儲存引擎相關。
引擎的優點主要有以下幾條:
通過建立唯一索引,可以保證資料庫表中的每一行資料的唯一性。
可以大大加快資料的查詢速度,這也是建立索引的最主要的原因。
在實現資料的參考完整性方面,可以加快表和表之間的串連。
在使用分組和排序子句進行資料查詢時,也可以顯著減少查詢中分組和排序的時間。
增加索引也有許多不利的方面:
建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。
索引需要佔磁碟空間,除了資料表佔據資料空間之外,每一個索引還要佔一定的物理空間,如果有大量的索引,索引檔案可能比資料檔案更快達到最大尺寸。
當對錶中的資料進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。
索引的分類
普通索引和唯一索引
普通索引和唯一索引是MySQL中的基本索引類型,允許定義索引的列中插入重複值和空值。
唯一索引,索引列的值必須唯一,但允許有空值。如果是複合式索引,則列值的組合必須唯一。
主鍵索引是一種特殊的唯一索引,不允許有空值。
單列索引和複合式索引
單列索引即一個索引只包含單個列,一個表上可以有多個單列索引。
複合式索引指在表的多個欄位組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用。使用複合式索引時遵循最左首碼集合。
全文索引
全文索引類型為FULLTEXT,在定義索引的列上支援值的全文尋找,允許在這些索引列中插入重複值和空值。全文索引可以在CHAR、VARCHAR或者TEXT類型的列上建立。MySQL只有MyISAM儲存引擎支援全文索引。
空間索引
空間索引是對空間資料類型的欄位建立索引,MySQL中的空間資料類型有4種,分別是:GEOMETRY、POINT、LINESTRING和POLYGON。MySQL使用SPATIAL關鍵字進行擴充,使得能夠用於建立正規索引類似的文法建立空間索引。建立空間索引的列必須聲明為NOT NULL,空間索引只能在儲存引擎為MyISAM的表的中建立。
索引的設計原則
mysql索引學習