索引的作用
在數(shù)據(jù)量非常大、涉及多表時(shí),為了提高查詢效率拖陆,數(shù)據(jù)庫會(huì)利用各種各樣快速定位技術(shù)來實(shí)現(xiàn)锡搜,
加上索引列將有序查詢,查詢速度將大大翻倍署驻。
查看索引
show index from tblname;或show keys from tblname;
字段 |
說明 |
Table |
表名 |
Non_unique |
如果索引不能包括重復(fù)詞奋献,則為0健霹。如果可以,則為1 |
Key_name |
索引的名稱 |
Seq_in_index |
索引中的列序列號(hào)瓶蚂,從1開始 |
Column_name |
列名稱 |
Collation |
列以什么方式存儲(chǔ)在索引中糖埋。在MySQL中,有值‘A'(升序)或NULL(無分類) |
Cardinality |
索引中唯一值的數(shù)目的估計(jì)值窃这。通過運(yùn)行ANALYZE TABLE或myisamchk -a可以更新瞳别。基數(shù)根據(jù)被存儲(chǔ)為整數(shù)的統(tǒng)計(jì)數(shù)據(jù)來計(jì)數(shù)杭攻,所以即使對(duì)于小型表祟敛,該值也沒有必要是精確的≌捉猓基數(shù)越大馆铁,當(dāng)進(jìn)行聯(lián)合時(shí),MySQL使用該索引的機(jī)會(huì)就越大 |
Sub_part |
如果列只是被部分地編入索引锅睛,則為被編入索引的字符的數(shù)目埠巨。如果整列被編入索引,則為NULL |
Packed |
指示關(guān)鍵字如何被壓縮现拒。如果沒有被壓縮辣垒,則為NULL |
Null |
如果列含有NULL,則含有YES印蔬。如果沒有乍构,則該列含有NO |
Index_type |
用過的索引方法(BTREE, FULLTEXT, HASH, RTREE) |
Comment |
注釋 |
創(chuàng)建索引
在create table 時(shí),可以創(chuàng)建索引扛点,也可以單獨(dú)用CREATE INDEX或ALTER TABLE來為表增加索引如:
1.ALTER TABLE
ALTER TABLE用來創(chuàng)建普通索引哥遮、UNIQUE索引或PRIMARY KEY索引。
(1.)ALTER TABLE table_name ADD INDEX index_name (column_list)
(2.)ALTER TABLE table_name ADD UNIQUE (column_list)
(3.)ALTER TABLE table_name ADD PRIMARY KEY (column_list)
其中table_name是要增加索引的表名陵究,column_list指出對(duì)哪些列進(jìn)行索引眠饮,
多列時(shí)各列之間用逗號(hào)分隔。索引名index_name可選铜邮,缺省時(shí)仪召,MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱。
另外松蒜,ALTER TABLE允許在單個(gè)語句中更改多個(gè)表扔茅, 因此可以在同時(shí)創(chuàng)建多個(gè)索引。
2.CREATE INDEX
CREATE INDEX可對(duì)表增加普通索引或UNIQUE索引秸苗。
(1)CREATE INDEX index_name ON table_name (column_list)
(2)CREATE UNIQUE INDEX index_name ON table_name (column_list)
table_name召娜、index_name和column_list具有與ALTER TABLE語句中相同的含義,索引名不可選惊楼。
另外玖瘸,不能用CREATE INDEX語句創(chuàng)建PRIMARY KEY索引秸讹。
刪除索引
可利用ALTER TABLE或DROP INDEX語句來刪除索引。類似于CREATE INDEX語句雅倒,
DROP INDEX可以在ALTER TABLE內(nèi)部作為一條語句處理璃诀,語法如下。
(1)DROP INDEX index_name ON talbe_name
(2)ALTER TABLE table_name DROP INDEX index_name
(3)ALTER TABLE table_name DROP PRIMARY KEY
其中蔑匣,前兩條語句是等價(jià)的劣欢,刪除掉table_name中的索引index_name。
第3條語句只在刪除PRIMARY KEY索引時(shí)使用裁良,因?yàn)橐粋€(gè)表只可能有一個(gè)PRIMARY KEY索引氧秘,
因此不需要指定索引名。如果沒有創(chuàng)建PRIMARY KEY索引趴久,但表具有一個(gè)或多個(gè)UNIQUE索引丸相,
則MySQL將刪除第一個(gè)UNIQUE索引。
如果從表中刪除了某列彼棍,則索引會(huì)受到影響灭忠。對(duì)于多列組合的索引,如果刪除其中的某列座硕,
則該列也會(huì)從索引中刪除弛作。如果刪除組成索引的所有列,則整個(gè)索引將被刪除华匾。
索引類型
在創(chuàng)建索引時(shí)映琳,可以規(guī)定索引能否包含重復(fù)值。如果不包含蜘拉,則索引應(yīng)該創(chuàng)建為PRIMARY KEY
或UNIQUE索引萨西。對(duì)于單列惟一性索引,這保證單列不包含重復(fù)的值旭旭。對(duì)于多列惟一性索引谎脯,保證多個(gè)值的
組合不重復(fù)。
PRIMARY KEY索引和UNIQUE索引非常類似持寄。事實(shí)上源梭,PRIMARY KEY索引僅是一個(gè)具有名稱PRIMARY
的UNIQUE索引。這表示一個(gè)表只能包含一個(gè)PRIMARY KEY稍味,因?yàn)橐粋€(gè)表中不可能具有兩個(gè)同名的索引废麻。
下面的SQL語句對(duì)students表在sid上添加PRIMARY KEY索引。代碼如下:
ALTER TABLE students ADD PRIMARY KEY (sid)
強(qiáng)制索引和禁止某個(gè)索引
1模庐、mysql強(qiáng)制使用索引:force index(索引名或者主鍵PRI)
例如:
select * from table force index(PRI) limit 2;(強(qiáng)制使用主鍵)
select * from table force index(ziduan1_index) limit 2;
(強(qiáng)制使用索引”ziduan1_index”)
select * from table force index(PRI,ziduan1_index) limit 2;
(強(qiáng)制使用索引”PRI和ziduan1_index”)
2烛愧、mysql禁止某個(gè)索引:ignore index(索引名或者主鍵PRI)
例如:
select * from table ignore index(PRI) limit 2;(禁止使用主鍵)
select * from table ignore index(ziduan1_index) limit 2;
(禁止使用索引”ziduan1_index”)
select * from table ignore index(PRI,ziduan1_index) limit 2;
(禁止使用索引”PRI,ziduan1_index”)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者