mysql索引原理與用法例項分析
阿新 • • 發佈:2020-04-28
本文例項講述了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 表名(欄位 資料型別,欄位 資料型別,…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]);
- create table 表名(欄位 資料型別,… unique 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]);
- create table 表名(欄位 資料型別,… fulltext index|key [索引名] (欄位 [索引的長度] [asc|desc]));
單列索引:
- 上面的加索引欄位為一個時,為單列索引
多列索引:
- 加索引的欄位為多個時,為多列索引
- 建立語法:只需要將上面的(欄位 [索引的長度] [asc|desc])變成(欄位1 [索引的長度] [asc|desc],欄位2 [索引的長度] [asc|desc],欄位1 [索引的長度] [asc|desc])即可。
檢視索引:
- 可以通過查看錶結構檢視索引
- 可以通過查看錶建立語句檢視索引
- 可以使用explain語句檢視索引,explain是用來判斷mysql語句執行的時間效率的。
- 所以可以使用explain select語句 where 加上索引的欄位作為條件;
- 結果中的possible_key是可能使用到的索引,key實際使用到的索引。
- 比如:
explain select * from user_info where username="lilei";
刪除索引:
- drop index 索引名 on 表名;
- 比如:
drop index myindex on user_info;
- 比如:
更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL索引操作技巧彙總》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》
希望本文所述對大家MySQL資料庫計有所幫助。