1. 程式人生 > 資料庫 >mysql索引原理與用法例項分析

mysql索引原理與用法例項分析

本文例項講述了mysql索引原理與用法。分享給大家供大家參考,具體如下:

本文內容:

  • 什麼是索引
  • 建立索引
    • 普通索引
    • 唯一索引
    • 全文索引
    • 單列索引
    • 多列索引
  • 檢視索引
  • 刪除索引

首發日期:2018-04-14


什麼是索引:

  • 索引可以幫助快速查詢資料
  • 基本上索引都要求唯一(有些不是),所以某種程度上也約束了資料的唯一性。
  • 索引建立在資料表物件上,由一個或多個欄位組成,這若干個欄位組成“鍵”儲存到資料結構中(B樹或者雜湊表)。【可以根據資料結構分類成B樹索引(innodb\myisam引擎),雜湊索引(memory引擎)】
  • 由於索引是加快資料查詢的,所以一般都使用在經常需要用來查詢的欄位上(比如where中常用欄位)
  • mysql支援的索引型別有:普通索引、唯一索引、全文索引、單列索引、多列索引、空間索引。

補充:

  • 主鍵與索引的區別:主鍵也是一種索引,主鍵也是一種唯一索引,但索引的作用主要是提高查詢速度,而主鍵作用主要是標識記錄唯一性(當然也便於查詢)。

建立索引:

普通索引:index

  • 普通索引就是沒有“唯一”,“不為空”要求的索引。
  • 語法:
    • create table 表名(欄位 資料型別,欄位 資料型別,…index|key [索引名] (欄位 [索引的長度] [asc|desc]));
      • index|key代表可以使用index關鍵字或key關鍵字
      • 索引名是可選的,不填時索引名為欄位名
      • 欄位是加索引的欄位,欄位可以有多個(多列索引)。
      • 索引的長度,可選的(有些引擎設定了最大長度,一般不深入學習應該很少遇到,這裡不講述)
      • asc|desc是可選的,代表索引中的“關鍵字”的排序
    • 在現有表結構的情況下增加索引:create index 索引名 on 表名 (欄位 [索引的長度] [asc|desc]);
    • 在現有表結構的情況下增加索引:alter table 表名 add index|key 索引名(欄位 [索引的長度] [asc|desc]);

唯一索引:

  • 唯一索引,就是建立索引時,要求欄位的資料是唯一的。
  • 建立語法:
    • create table 表名(欄位 資料型別,… unique index|key [索引名] (欄位 [索引的長度] [asc|desc]));
      • 【引數資訊參考普通索引的】
    • 在現有表結構的情況下增加索引:create unique index 索引名 on 表名 (欄位 [索引的長度] [asc|desc]);
    • 在現有表結構的情況下增加索引:alter table 表名 add unqiue index|key 索引名(欄位 [索引的長度] [asc|desc]);

全文索引:fulltext index

  • 全文索引一般使用在資料型別為char,varchar和text的欄位上,方便查詢這些比較長的資料。
  • myisam儲存引擎支援全文索引
  • 建立語法:
    • create table 表名(欄位 資料型別,… fulltext index|key [索引名] (欄位 [索引的長度] [asc|desc]));
      • 【引數資訊參考普通索引的】
    • 在現有表結構的情況下增加索引:create fulltext index 索引名 on 表名 (欄位 [索引的長度] [asc|desc]);
    • 在現有表結構的情況下增加索引:alter table 表名 add fulltext index|key 索引名(欄位 [索引的長度] [asc|desc]);

單列索引:

  • 上面的加索引欄位為一個時,為單列索引

多列索引:

  • 加索引的欄位為多個時,為多列索引
  • 建立語法:只需要將上面的(欄位 [索引的長度] [asc|desc])變成(欄位1 [索引的長度] [asc|desc],欄位2 [索引的長度] [asc|desc],欄位1 [索引的長度] [asc|desc])即可。

檢視索引:

  • 可以通過查看錶結構檢視索引
    • image
  • 可以通過查看錶建立語句檢視索引
    • image
  • 可以使用explain語句檢視索引,explain是用來判斷mysql語句執行的時間效率的。
    • 所以可以使用explain select語句 where 加上索引的欄位作為條件;
    • 結果中的possible_key是可能使用到的索引,key實際使用到的索引。
    • 比如:
      explain select * from user_info where username="lilei";
      image

刪除索引:

  • drop index 索引名 on 表名;
    • 比如:
      drop index myindex on user_info;

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL索引操作技巧彙總》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》

希望本文所述對大家MySQL資料庫計有所幫助。