mysql索引的使用方法:【alter table table_name add index 索引名(column)】,表示添加普通索引。mysql索引的目的在于提高查詢效率。
mysql索引的目的在于提高查詢效率,可以類比字典,如果要查“mysql”這個(gè)單詞,我們肯定需要定位到m字母,然后從下往下找到y(tǒng)字母,再找到剩下的sql。如果沒有索引,那么你可能需要把所有單詞看一遍才能找到你想要的。?
(推薦教程:mysql視頻教程)
在創(chuàng)建索引時(shí),需要考慮哪些列會用于 SQL 查詢,然后為這些列創(chuàng)建一個(gè)或多個(gè)索引。事實(shí)上,索引也是一種表,保存著主鍵或索引字段,以及一個(gè)能將每個(gè)記錄指向?qū)嶋H表的指針。數(shù)據(jù)庫用戶是看不到索引的,它們只是用來加速查詢的。數(shù)據(jù)庫搜索引擎使用索引來快速定位記錄。
mysql有四種索引(主鍵索引/普通索引/全文索引/唯一索引)
1.索引的添加?
1.1主鍵索引的添加
當(dāng)一張表,把某個(gè)列設(shè)為主鍵的時(shí)候,則該列就是主鍵索引
create?table?a(?? id?int?primary?key?auto_increment,?? name?varchar(20)?not?NULL?default?''?? );?? //這里id就是表的主鍵
如果當(dāng)創(chuàng)建表時(shí)沒有指定主鍵索引,也可以在創(chuàng)建表之后添加:
alter?table?table_name?add?primary?key?(column?name);
1.2普通索引
普通索引一般是在建表后再添加的,
create?index?索引名?on?table_name(column1,column2); alter?table?table_name?add?index?索引名(column1,column2);
1.3全文索引
首先,全文索引主要針對文本文件,比如文章,標(biāo)題,全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)
create?table?c(?? id?int?primary?key?auto_increment?,?? title?varchar(20),?? content?text,?? fulltext(title,content)?? )engine=myisam?charset?utf8;?? ?? insert?into?c(title,content)?values?? ????('MySQL?Tutorial','DBMS?stands?for?DataBase?...'),?? ????('How?To?Use?MySQL?Well','After?you?went?through?a?...'),?? ????('Optimizing?MySQL','In?this?tutorial?we?will?show?...'),?? ????('1001?MySQL?Tricks','1.?Never?run?mysqld?as?root.?2.?...'),?? ????('MySQL?vs.?YourSQL','In?the?following?database?comparison?...'),?? ????('MySQL?Security','When?configured?properly,?MySQL?...');
使用全文索引常見的錯(cuò)誤:
select?*?from?c?where?content?like?"%mysql%";
這里并不會使用全文索引,可以用explain進(jìn)行查看。正確用法:
select?*??from?c?where?match(title,content)?against?('MYSQL');
備注:
1.? 在mysql中fulltext 索引只針對 myisam生效
2.? mysql自己提供的fulltext針對英文生效->sphinx(coreseek)技術(shù)處理中文
3.? 使用方法是 match(字段名..) against(‘關(guān)鍵字’)
1.4唯一索引
create?table?d(id?int?primary?key?auto_increment?,?name?varchar(32)?unique)
d表中name就是唯一索引,唯一索引可以有多個(gè)null,不能是重復(fù)的內(nèi)容
相比主鍵索引,主鍵字段不能為null,也不能重復(fù)
2. 查詢索引
show?indexes?from?table_name; show?keys?from?table_name;
3.刪除索引
alter?table?table_name?drop?index?索引名;