索引

MySQL 索引

https://dev.mysql.com/doc/refman/5.7/en/create-index.html
MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的以舒,索引可以大大提高M(jìn)ySQL的檢索速度墓卦。
打個(gè)比方埠偿,如果合理的設(shè)計(jì)且使用索引的MySQL是一輛蘭博基尼的話,那么沒有設(shè)計(jì)和使用索引的MySQL就是一個(gè)人力三輪車。
索引分單列索引和組合索引。單列索引,即一個(gè)索引只包含單個(gè)列诺舔,一個(gè)表可以有多個(gè)單列索引,但這不是組合索引备畦。組合索引低飒,即一個(gè)索引包含多個(gè)列。
創(chuàng)建索引時(shí)懂盐,你需要確保該索引是應(yīng)用在 SQL 查詢語(yǔ)句的條件(一般作為 WHERE 子句的條件)褥赊。
實(shí)際上,索引也是一張表莉恼,該表保存了主鍵與索引字段拌喉,并指向?qū)嶓w表的記錄。
上面都在說使用索引的好處俐银,但過多的使用索引將會(huì)造成濫用尿背。因此索引也會(huì)有它的缺點(diǎn):雖然索引大大提高了查詢速度,同時(shí)卻會(huì)降低更新表的速度捶惜,如對(duì)表進(jìn)行INSERT田藐、UPDATE和DELETE。因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù)汽久,還要保存一下索引文件鹤竭。
建立索引會(huì)占用磁盤空間的索引文件。

普通索引

創(chuàng)建索引

這是最基本的索引景醇,它沒有任何限制臀稚。它有以下幾種創(chuàng)建方式:

CREATE INDEX indexName ON mytable(username(length)); 

如果是CHAR,VARCHAR類型啡直,length可以小于字段實(shí)際長(zhǎng)度烁涌;如果是BLOB和TEXT類型苍碟,必須指定 length酒觅。

修改表結(jié)構(gòu)(添加索引)

ALTER table tableName ADD INDEX indexName(columnName)

創(chuàng)建表的時(shí)候直接指定

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
); 

刪除索引的語(yǔ)法

DROP INDEX [indexName] ON mytable; 

唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一微峰,但允許有空值舷丹。如果是組合索引,則列值的組合必須唯一蜓肆。它有以下幾種創(chuàng)建方式:

創(chuàng)建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

修改表結(jié)構(gòu)

ALTER table mytable ADD UNIQUE [indexName] (username(length))

創(chuàng)建表的時(shí)候直接指定

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
); 

使用ALTER 命令添加和刪除索引

有四種方式來(lái)添加數(shù)據(jù)表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語(yǔ)句添加一個(gè)主鍵颜凯,這意味著索引值必須是唯一的,且不能為NULL仗扬。
  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語(yǔ)句創(chuàng)建索引的值必須是唯一的(除了NULL外症概,NULL可能會(huì)出現(xiàn)多次)。
  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引早芭,索引值可出現(xiàn)多次彼城。
  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語(yǔ)句指定了索引為 FULLTEXT ,用于全文索引退个。

以下實(shí)例為在表中添加索引募壕。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你還可以在 ALTER 命令中使用 DROP 子句來(lái)刪除索引。嘗試以下實(shí)例刪除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;

使用 ALTER 命令添加和刪除主鍵
主鍵只能作用于一個(gè)列上语盈,添加主鍵索引時(shí)舱馅,你需要確保該主鍵默認(rèn)不為空(NOT NULL)。實(shí)例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可以使用 ALTER 命令刪除主鍵:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY; 

刪除主鍵時(shí)只需指定PRIMARY KEY刀荒,但在刪除索引時(shí)代嗤,你必須知道索引名。

顯示索引信息

你可以使用 SHOW INDEX 命令來(lái)列出表中的相關(guān)的索引信息缠借「梢悖可以通過添加 \G 來(lái)格式化輸出信息。

嘗試以下實(shí)例:

mysql> SHOW INDEX FROM table_name; \G
........
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烈炭,一起剝皮案震驚了整個(gè)濱河市溶锭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌符隙,老刑警劉巖趴捅,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垫毙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拱绑,警方通過查閱死者的電腦和手機(jī)综芥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猎拨,“玉大人膀藐,你說我怎么就攤上這事『焓。” “怎么了额各?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吧恃。 經(jīng)常有香客問我虾啦,道長(zhǎng),這世上最難降的妖魔是什么痕寓? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任傲醉,我火速辦了婚禮,結(jié)果婚禮上呻率,老公的妹妹穿的比我還像新娘硬毕。我一直安慰自己,他們只是感情好礼仗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布知允。 她就那樣靜靜地躺著绘闷,像睡著了一般培遵。 火紅的嫁衣襯著肌膚如雪狈谊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天卢厂,我揣著相機(jī)與錄音乾蓬,去河邊找鬼。 笑死慎恒,一個(gè)胖子當(dāng)著我的面吹牛任内,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播融柬,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼死嗦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粒氧?” 一聲冷哼從身側(cè)響起越除,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后摘盆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翼雀,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年孩擂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狼渊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡类垦,死狀恐怖狈邑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚤认,我是刑警寧澤米苹,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站烙懦,受9級(jí)特大地震影響驱入,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氯析,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莺褒。 院中可真熱鬧掩缓,春花似錦、人聲如沸遵岩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尘执。三九已至舍哄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間誊锭,已是汗流浹背表悬。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧靡,地道東北人蟆沫。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像温治,于是被迫代替她去往敵國(guó)和親饭庞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1熬荆、概述 ??索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分)舟山,它們包含著對(duì)數(shù)據(jù)表里所有記...
    黒貓閱讀 382評(píng)論 0 3
  • MySQL 索引 MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的,索引可以大大提高M(jìn)ySQL的檢索速度。 ...
    SkTj閱讀 379評(píng)論 0 0
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,811評(píng)論 5 116
  • 索引是應(yīng)用程序設(shè)計(jì)和開發(fā)的一個(gè)重要方面累盗。 若索引太多六孵, 應(yīng)用程序的性能可能會(huì)受到影響。 而索引太少幅骄, 對(duì)查詢性能又...
    好好學(xué)習(xí)Sun閱讀 1,039評(píng)論 0 4
  • 之前的文章一直在規(guī)避索引的建立去優(yōu)化數(shù)據(jù)庫(kù)拆座,不是不想講主巍,而是這個(gè)太重要,必須抽出來(lái)講挪凑。今天我們就來(lái)研究下數(shù)據(jù)庫(kù)索引...
    JackFrost_fuzhu閱讀 4,738評(píng)論 0 70