codtion 10 MySQL索引類型

一单匣、簡(jiǎn)介

MySQL目前主要有以下幾種索引類型:
1.普通索引
2.唯一索引
3.主鍵索引
4.組合索引
5.全文索引

二.索引類型

1.普通索引
是最基本的索引,它沒(méi)有任何限制。它有以下幾種創(chuàng)建方式:
(1)直接創(chuàng)建索引

CREATE INDEX index_name ON table(column(length))

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

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

(3)創(chuàng)建表的時(shí)候同時(shí)創(chuàng)建索引

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    INDEX index_name (title(length))
)

(4) 刪除索引

DROP INDEX index_name ON table

2.唯一索引
與前面的普通索引類似坑傅,不同的就是:索引列的值必須唯一当悔,但允許有空值肮塞。如果是組合索引技扼,則列值的組合必須唯一分飞。它有以下幾種創(chuàng)建方式:
(1)創(chuàng)建唯一索引

CREATE UNIQUE INDEX indexName ON table(column(length))

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

ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))

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

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    UNIQUE indexName (title(length))
);

3.主鍵索引
是一種特殊的唯一索引,一個(gè)表只能有一個(gè)主鍵享幽,不允許有空值铲掐。一般是在建表的時(shí)候同時(shí)創(chuàng)建主鍵索引:

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) NOT NULL ,
    PRIMARY KEY (`id`)
);

4.組合索引
指多個(gè)字段上創(chuàng)建的索引,只有在查詢條件中使用了創(chuàng)建索引時(shí)的第一個(gè)字段值桩,索引才會(huì)被使用摆霉。使用組合索引時(shí)遵循最左前綴集合

ALTER TABLE `table` ADD INDEX name_city_age (name,city,age); 

5.全文索引
主要用來(lái)查找文本中的關(guān)鍵字,而不是直接與索引中的值相比較奔坟。fulltext索引跟其它索引大不相同携栋,它更像是一個(gè)搜索引擎,而不是簡(jiǎn)單的where語(yǔ)句的參數(shù)匹配咳秉。fulltext索引配合match against操作使用婉支,而不是一般的where語(yǔ)句加like。它可以在create table澜建,alter table 向挖,create index使用,不過(guò)目前只有char霎奢、varchar户誓,text 列上可以創(chuàng)建全文索引饼灿。值得一提的是幕侠,在數(shù)據(jù)量較大時(shí)候,現(xiàn)將數(shù)據(jù)放入一個(gè)沒(méi)有全局索引的表中碍彭,然后再用CREATE index創(chuàng)建fulltext索引晤硕,要比先為一張表建立fulltext然后再將數(shù)據(jù)寫入的速度快很多。
(1)創(chuàng)建表的適合添加全文索引

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    FULLTEXT (content)
);

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

ALTER TABLE article ADD FULLTEXT index_content(content)

(3)直接創(chuàng)建索引

CREATE FULLTEXT INDEX index_content ON article(content)

四庇忌、缺點(diǎn)
**
1.雖然索引大大提高了查詢速度舞箍,同時(shí)卻會(huì)降低更新表的速度,如對(duì)表進(jìn)行insert皆疹、update和delete疏橄。因?yàn)楦卤頃r(shí),不僅要保存數(shù)據(jù),還要保存一下索引文件捎迫。
2.建立索引會(huì)占用磁盤空間的索引文件晃酒。一般情況這個(gè)問(wèn)題不太嚴(yán)重,但如果你在一個(gè)大表上創(chuàng)建了多種組合索引窄绒,索引文件的會(huì)增長(zhǎng)很快贝次。
**
索引只是提高效率的一個(gè)因素,如果有大數(shù)據(jù)量的表彰导,就需要花時(shí)間研究建立最優(yōu)秀的索引蛔翅,或優(yōu)化查詢語(yǔ)句**

五、注意事項(xiàng)

使用索引時(shí)位谋,有以下一些技巧和注意事項(xiàng):
1.索引不會(huì)包含有null值的列
只要列中包含有null值都將不會(huì)被包含在索引中山析,復(fù)合索引中只要有一列含有null值,那么這一列對(duì)于此復(fù)合索引就是無(wú)效的掏父。所以我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)時(shí)不要讓字段的默認(rèn)值為null盖腿。
2.使用短索引
對(duì)串列進(jìn)行索引,如果可能應(yīng)該指定一個(gè)前綴長(zhǎng)度损同。例如翩腐,如果有一個(gè)char(255)的列,如果在前10個(gè)或20個(gè)字符內(nèi)膏燃,多數(shù)值是惟一的茂卦,那么就不要對(duì)整個(gè)列進(jìn)行索引。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間和I/O操作组哩。
3.索引列排序
查詢只使用一個(gè)索引等龙,因此如果where子句中已經(jīng)使用了索引的話,那么order by中的列是不會(huì)使用索引的伶贰。因此數(shù)據(jù)庫(kù)默認(rèn)排序可以符合要求的情況下不要使用排序操作蛛砰;盡量不要包含多個(gè)列的排序,如果需要最好給這些列創(chuàng)建復(fù)合索引黍衙。
4.like語(yǔ)句操作
一般情況下不推薦使用like操作泥畅,如果非使用不可,如何使用也是一個(gè)問(wèn)題琅翻。like “%aaa%” 不會(huì)使用索引而like “aaa%”可以使用索引位仁。
5.不要在列上進(jìn)行運(yùn)算
這將導(dǎo)致索引失效而進(jìn)行全表掃描,例如

SELECT * FROM table_name WHERE YEAR(column_name)<2017;

6.不使用not in和<>操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末方椎,一起剝皮案震驚了整個(gè)濱河市聂抢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棠众,老刑警劉巖琳疏,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡空盼,警方通過(guò)查閱死者的電腦和手機(jī)疮薇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)我注,“玉大人按咒,你說(shuō)我怎么就攤上這事〉牵” “怎么了励七?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奔缠。 經(jīng)常有香客問(wèn)我掠抬,道長(zhǎng),這世上最難降的妖魔是什么校哎? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任两波,我火速辦了婚禮,結(jié)果婚禮上闷哆,老公的妹妹穿的比我還像新娘腰奋。我一直安慰自己,他們只是感情好抱怔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布劣坊。 她就那樣靜靜地躺著,像睡著了一般屈留。 火紅的嫁衣襯著肌膚如雪局冰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天灌危,我揣著相機(jī)與錄音康二,去河邊找鬼。 笑死勇蝙,一個(gè)胖子當(dāng)著我的面吹牛沫勿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浅蚪,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼藕帜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惜傲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贝攒,失蹤者是張志新(化名)和其女友劉穎盗誊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哈踱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年荒适,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开镣。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刀诬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邪财,到底是詐尸還是另有隱情陕壹,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布树埠,位于F島的核電站糠馆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏怎憋。R本人自食惡果不足惜又碌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绊袋。 院中可真熱鬧毕匀,春花似錦、人聲如沸癌别。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)规个。三九已至凤薛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诞仓,已是汗流浹背缤苫。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墅拭,地道東北人活玲。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谍婉,于是被迫代替她去往敵國(guó)和親舒憾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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