mysql索引技术_MySQL索引类型
首先請(qǐng)查看不同引擎支持的索引類型:存儲(chǔ)引擎簡(jiǎn)介?。
聚集索引和非聚集索引概念見(jiàn):聚集索引與非聚集索引?和?聚集索引?。 覆蓋索引見(jiàn):覆蓋索引?。
1. InnoDB的每一個(gè)表都會(huì)有一個(gè)聚集索引(第一索引,主鍵索引)。InnoDB按照主鍵進(jìn)行聚集,如果沒(méi)有定義主鍵,InnoDB會(huì)試著使用唯一的非空索引來(lái)代替。如果沒(méi)有這種索引,InnoDB就會(huì)定義隱藏的主鍵然后在上面進(jìn)行聚集。
2. InnoDB不支持非主鍵的聚集索引,默認(rèn)在主鍵上建立聚集索引(因?yàn)橛辛酥麈I就有了索引,大量insert速度會(huì)變慢?先disable主鍵再insert?)。如果想在某列建立聚集索引,那么只能將該列設(shè)為主鍵。
3. 聚集索引采用B+Tree。其他索引不采用B+Tree。如果其他索引使用B-Tree,則葉子節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)為主鍵,即先用B-Tree找到該列所屬的主鍵(存儲(chǔ)在葉子節(jié)點(diǎn)上),再主鍵通過(guò)B+Tree找到該行中所有所需數(shù)據(jù)(叫做回表?)。
4. B-Tree是索引和數(shù)據(jù)不同文件存儲(chǔ)?應(yīng)該都是存儲(chǔ)在同一文件中。
5. 聚集的覆蓋索引默認(rèn)存在。非聚集覆蓋索引的建立需要查詢列包含在主鍵中(組合主鍵,非最左),并對(duì)查詢列建立索引。
創(chuàng)建索引語(yǔ)法如下:? ? CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name? ? [USING index_type]? ? ON tbl_name (index_col_name,...)? ? index_col_name:? ? col_name [(length)] [ASC | DESC]?索引的存儲(chǔ)類型目前只有兩種(btree和hash),具體和表的模式相關(guān):? ? myisam???? btree? ? innodb????? btree? ? memory/heap hash,btree
1.
alter table table_name add index index_name (column_list) ; ? ? ? 普通索引
alter table table_name add unique (column_list) ; ? ? ? ? ? ? ? ? ? ? ? ? ?唯一索引
alter table table_name add primary key (column_list) ; ? ? ? ? ? ? ? ? ?主鍵索引
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3種創(chuàng)建索引的格式,table_name是要增加索引的表名,column_list指出對(duì)哪些列進(jìn)行索引,多列時(shí)各列之間用逗號(hào)分隔。索引名index_name可選,缺省時(shí),MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱。
2.
create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;
說(shuō)明:table_name、index_name和column_list具有與ALTER TABLE語(yǔ)句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語(yǔ)句創(chuàng)建PRIMARY KEY索引。
3. 刪除索引
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
其中,在前面的兩條語(yǔ)句中,都刪除了table_name中的索引index_name。而在最后一條語(yǔ)句中,只在刪除PRIMARY KEY索引中使用,因?yàn)橐粋€(gè)表只可能有一個(gè)PRIMARY KEY索引,因此不需要指定索引名。如果沒(méi)有創(chuàng)建PRIMARY KEY索引,但表具有一個(gè)或多個(gè)UNIQUE索引,則MySQL將刪除第一個(gè)UNIQUE索引。
總結(jié)
以上是生活随笔為你收集整理的mysql索引技术_MySQL索引类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: msgloop.exe是什么进程 有什么
- 下一篇: workerman mysql_work