《Mysql的索引》要點(diǎn):
本文介紹了Mysql的索引,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
索引是贊助MySql高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu).
索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包括著對(duì)數(shù)據(jù)表里所有記錄的引用指針.更通俗的說(shuō),數(shù)據(jù)庫(kù)索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫(kù)的查詢速度.
索引分為聚簇索引和非聚簇索引兩種,聚簇索引是依照數(shù)據(jù)存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對(duì)于單行的檢索很快.
MySQL索引的類型
1. 普通索引
這是最基本的索引,它沒(méi)有任何限制,MyIASM中默認(rèn)的BTREE類型的索引,也是我們年夜多數(shù)情況下用到的索引.
–––直接創(chuàng)立索引
CREATE INDEX index_name ON table(column(length))
–修改表布局的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
–––創(chuàng)立表的時(shí)候同時(shí)創(chuàng)立索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))
)
–––刪除索引
DROP INDEX index_name ON table
2. 唯一索引
與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同).如果是組合索引,則列值的組合必須唯一,創(chuàng)建辦法和普通索引類似.
–––創(chuàng)立唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
–––修改表布局
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
–––創(chuàng)立表的時(shí)候直接指定
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE indexName (title(length))
);
3. 全文索引(FULLTEXT)
MySQL從3.23.23版開始支持全文索引和全文檢索,FULLTEXT索引僅可用于 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語(yǔ)句的一部分被創(chuàng)建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加.////對(duì)于較大的數(shù)據(jù)集,將你的資料輸入一個(gè)沒(méi)有FULLTEXT索引的表中,然后創(chuàng)建索引,其速度比把資料輸入現(xiàn)有FULLTEXT索引的速度更為快.不外切記對(duì)于大容量的數(shù)據(jù)表,生成全文索引是一個(gè)非常消耗時(shí)間非常消耗硬盤空間的做法.
–––創(chuàng)立表的適合添加全文索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
–––修改表布局添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)
–直接創(chuàng)立索引
CREATE FULLTEXT INDEX index_content ON article(content)
4. 單列索引、多列索引
多個(gè)單列索引與單個(gè)多列索引的查詢效果分歧,因?yàn)閳?zhí)行查詢時(shí),MySQL只能使用一個(gè)索引,會(huì)從多個(gè)索引中選擇一個(gè)限制最為嚴(yán)格的索引.
5. 組合索引(最左前綴)
平時(shí)用的SQL查詢語(yǔ)句一般都有比擬多的限制條件,所以為了進(jìn)一步榨取MySQL的效率,就要考慮建立組合索引.例如針對(duì)title和time建立一個(gè)組合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10)).建立這樣的組合索引,其實(shí)是相當(dāng)于分別建立了下面兩組組合索引:
–title,time
–title
為什么沒(méi)有time這樣的組合索引呢?這是因?yàn)镸ySQL組合索引“最左前綴”的結(jié)果.簡(jiǎn)單的理解就是只從最左面的開始組合.并不是只要包括這兩列的查詢都會(huì)用到該組合索引.
索引文件自己要消耗存儲(chǔ)空間,同時(shí)索引會(huì)加重插入、刪除和修改記錄時(shí)的負(fù)擔(dān),另外,MySQL在運(yùn)行時(shí)也要消耗資源維護(hù)索引,因此索引并不是越多越好.
關(guān)于索引還有許多,這里只是簡(jiǎn)介.
歡迎參與《Mysql的索引》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7141.html