索引

  索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間越多,如果表中查詢的列有一個索引,MySQL能快速到達某個位置去搜尋數據文件,而不必查看所有數據。

1索引簡介

   數據庫中的索引是某個表中一列或者若干列值的集合,是一個獨立的、物理的數據庫結構,一般是與圖或視圖中的列相關聯,數據庫用戶可以利用索引快速地訪問數據表中的數據信息。通常情況下,只有在需要經常查詢索引列中的數據時,纔在表上創建索引,因爲索引的使用會佔用磁盤的空間,並且降低添加、刪除和更新數據行的速度。
  索引是在存儲引擎中實現的,所有存儲引擎支持每個表至少16個索引,MySQL中索引的存儲類型有兩種:BTREE和HASH,具體和表的存儲引擎相關,MyISAM和InnoDB存儲引擎只支持BTREE索引;MEMORY存儲引擎可以支持HASH和BTREE索引。 

  • 在數據庫中,索引主要有以下的一些作用:

    • 通過創建索引,可以保證數據記錄的唯一性;
    • 可以大大加快數據檢索速度;
    • 在使用分組或排序子句進行檢索數據時,可以顯著減少查詢中分組和排序的時間。
  • 索引的分類:

    • 普通索引和唯一索引

      • 普通索引:基本索引類型,允許在定義索引的列中插入重複值和空值
      • 唯一索引:索引列的值必須唯一,但允許有空值,主鍵索引是一種特殊的唯一索引,不允許有空值
    • 單列索引和組合索引

      • 單列索引:一個索引值包含單個列,一個表中可以有多個單列索引
      • 組合索引:在表的多個字段上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。
    • 全文索引:全文索引類型爲FULLTEXT,在定義索引的列上支持值的全文查找,允許在這些索引列中插入空值和重複值,全文索引可以在CHAR、VARCHAR或者TEXT類型的列上創建,MySQL中只有MyISAM存儲引擎支持全文索引。

  • 索引的設計原則:

    • 索引並非越多越好,索引會影響INSERT、DELETE和UPDATE語句的性能
    • 避免對經常更新的表進行過多的索引,索引列應該儘可能減少,對於經常查詢的字段應該創建索引,但是避免添加不必要的字段
    • 數據量小的表最好不要使用索引,此時建立索引並不會優化性能

    • 在條件表達式中經常用到的不同值較多的列上建立索引,在不同值很少的列上不要建立索引

    • 靈活使用唯一索引
    • 在頻繁進行排序或分組的列上建立索引,可以提升性能

2創建索引

  MySQL支持多種方法在單個或多列上創建索引:在創建表的定義語句CREATE TABLE中指定索引,使用ALTER TABLE語句在存在的表上創建索引,或者使用CREATE INDEX語句在已存在的表上添加索引。
   

  • 創建表的時候創建索引:create table table_name [col_name data_type] [unique|fulltext|spatial[index|key] [index_name] (column_name,...) [asc|desc];

  • 在已經存在的表上創建索引

    • 使用ALTER TABLE語句創建索引:alter table table_name add [unique|fulltext|spatial] [index|key] [index_name] (column_name,...) [asc|desc];

    • 使用CREATE INDEX語句創建索引:create [unique|fulltext|spatial] [index|key] [index_name] on table_name (column_name,...) [asc|desc];

3刪除索引

MySQL中刪除索引使用ALTER TABLE或者DROP INDEX語句。

  • 使用ALTER TABLE刪除索引:alter table table_name drop index index_name;

  • 使用DROP INDEX刪除索引:drop index index_name on table_name;

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