mysql索引原理與用法實例分析
本文實例講述了mysql索引原理與用法。分享給大家供大家參考,具體如下:
本文內(nèi)容:
- 什么是索引
- 創(chuàng)建索引
- 普通索引
- 唯一索引
- 全文索引
- 單列索引
- 多列索引
- 查看索引
- 刪除索引
首發(fā)日期:2018-04-14
什么是索引:
- 索引可以幫助快速查找數(shù)據(jù)
- 而基本上索引都要求唯一(有些不是),所以某種程度上也約束了數(shù)據(jù)的唯一性。
- 索引創(chuàng)建在數(shù)據(jù)表對象上,由一個或多個字段組成,這若干個字段組成“鍵”存儲到數(shù)據(jù)結(jié)構(gòu)中(B樹或者哈希表)。【可以根據(jù)數(shù)據(jù)結(jié)構(gòu)分類成B樹索引(innodb\myisam引擎),哈希索引(memory引擎)】
- 由于索引是加快數(shù)據(jù)查找的,所以一般都使用在經(jīng)常需要用來查找的字段上(比如where中常用字段)
- mysql支持的索引類型有:普通索引、唯一索引、全文索引、單列索引、多列索引、空間索引。
補充:
- 主鍵與索引的區(qū)別:主鍵也是一種索引,主鍵也是一種唯一索引,但索引的作用主要是提高查找速度,而主鍵作用主要是標(biāo)識記錄唯一性(當(dāng)然也便于查找)。
創(chuàng)建索引:
普通索引:index
- 普通索引就是沒有“唯一”,“不為空”要求的索引。
- 語法:
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,…index|key [索引名] (字段 [索引的長度] [asc|desc]));
- index|key代表可以使用index關(guān)鍵字或key關(guān)鍵字
- 索引名是可選的,不填時索引名為字段名
- 字段是加索引的字段,字段可以有多個(多列索引)。
- 索引的長度,可選的(有些引擎設(shè)置了最大長度,一般不深入學(xué)習(xí)應(yīng)該很少遇到,這里不講述)
- asc|desc是可選的,代表索引中的“關(guān)鍵字”的排序
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:create index 索引名 on 表名 (字段 [索引的長度] [asc|desc]);
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:alter table 表名 add index|key 索引名(字段 [索引的長度] [asc|desc]);
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,…index|key [索引名] (字段 [索引的長度] [asc|desc]));
唯一索引:
- 唯一索引,就是創(chuàng)建索引時,要求字段的數(shù)據(jù)是唯一的。
- 創(chuàng)建語法:
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,… unique index|key [索引名] (字段 [索引的長度] [asc|desc]));
- 【參數(shù)信息參考普通索引的】
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:create unique index 索引名 on 表名 (字段 [索引的長度] [asc|desc]);
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:alter table 表名 add unqiue index|key 索引名(字段 [索引的長度] [asc|desc]);
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,… unique index|key [索引名] (字段 [索引的長度] [asc|desc]));
全文索引:fulltext index
- 全文索引一般使用在數(shù)據(jù)類型為char,varchar和text的字段上,方便查找這些比較長的數(shù)據(jù)。
- myisam存儲引擎支持全文索引
- 創(chuàng)建語法:
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,… fulltext index|key [索引名] (字段 [索引的長度] [asc|desc]));
- 【參數(shù)信息參考普通索引的】
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:create fulltext index 索引名 on 表名 (字段 [索引的長度] [asc|desc]);
- 在現(xiàn)有表結(jié)構(gòu)的情況下增加索引:alter table 表名 add fulltext index|key 索引名(字段 [索引的長度] [asc|desc]);
- create table 表名(字段 數(shù)據(jù)類型,字段 數(shù)據(jù)類型,… fulltext index|key [索引名] (字段 [索引的長度] [asc|desc]));
單列索引:
- 上面的加索引字段為一個時,為單列索引
多列索引:
- 加索引的字段為多個時,為多列索引
- 創(chuàng)建語法:只需要將上面的(字段 [索引的長度] [asc|desc])變成(字段1 [索引的長度] [asc|desc],字段2 [索引的長度] [asc|desc],字段1 [索引的長度] [asc|desc])即可。
查看索引:
- 可以通過查看表結(jié)構(gòu)查看索引
- 可以通過查看表創(chuàng)建語句查看索引
- 可以使用explain語句查看索引,explain是用來判斷mysql語句執(zhí)行的時間效率的。
- 所以可以使用explain select語句 where 加上索引的字段作為條件;
- 結(jié)果中的possible_key是可能使用到的索引,key實際使用到的索引。
- 比如:
explain select * from user_info where username="lilei";
刪除索引:
- drop index 索引名 on 表名;
- 比如:
drop index myindex on user_info;
- 比如:
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL索引操作技巧匯總》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。
相關(guān)文章
mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法
這篇文章主要介紹了mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別
本文主要介紹了Mysql中count(*)、count(1)、count(主鍵id)與count(字段)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07mysql數(shù)據(jù)存儲過程參數(shù)實例詳解
這篇文章主要介紹了mysql數(shù)據(jù)存儲過程參數(shù)實例詳解,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10