mysql最常用的索引_mysql常用索引
1.索引
在關(guān)系數(shù)據(jù)庫(kù)中,索引是一種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種存儲(chǔ)結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。索引的作用相當(dāng)于圖書的目錄,可以根據(jù)目錄中的頁(yè)碼快速找到所需的內(nèi)容
2.索引的作用
1.大大加快數(shù)據(jù)的檢索速度;
2.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性;
3.加速表和表之間的連接;
4.在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間。
3.常用的索引有哪些
Mysql常見(jiàn)索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
PRIMARY KEY(主鍵索引)??ALTER TABLE `table_name` ADD?PRIMARY KEY?( `col` )
UNIQUE(唯一索引)?? ? ALTER TABLE `table_name` ADD?UNIQUE?(`col`)
INDEX(普通索引) ??? ALTER TABLE `table_name` ADD?INDEX index_name?(`col`)
FULLTEXT(全文索引) ??? ?ALTER TABLE `table_name` ADD?FULLTEXT?( `col` )
組合索引?? ALTER TABLE `table_name` ADD?INDEX index_name?(`col1`, `col2`, `col3` )
4.Mysql各種索引區(qū)別:
普通索引:最基本的索引,沒(méi)有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引:它 是一種特殊的唯一索引,不允許有空值。
全文索引:僅可用于 MyISAM 表,針對(duì)較大的數(shù)據(jù),生成全文索引很耗時(shí)好空間。
組合索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。創(chuàng)建復(fù)合索引時(shí)應(yīng)該將最常用(頻率)作限制條件的列放在最左邊,依次遞減。
5.索引的語(yǔ)法:建表時(shí)指定\追加索引\刪除索引
(1)使用ALTER TABLE語(yǔ)句創(chuàng)建索引。 語(yǔ)法如下:
alter table table_name add unique (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è)名稱。另外,ALTER TABLE允許在單個(gè)語(yǔ)句中更改多個(gè)表,因此可以同時(shí)創(chuàng)建多個(gè)索引。
(2)使用CREATE INDEX語(yǔ)句對(duì)表增加索引。
建表時(shí)增加索引(以唯一索引為例)
create table tableName(
columnName int,
unique key(columnName)
);
單獨(dú)建議唯一索引
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)刪除索引
alter table tableName drop index columnName;? ? ?刪除唯一索引
6.如何查詢索引的使用情況
通過(guò)show status like '%Handler_read%'方法查看:整體
handler_read_key:這個(gè)值越高越好,越高表示使用索引查詢到的次數(shù)。
handler_read_rnd_next:這個(gè)值越高,說(shuō)明查詢低效。
2.使用explain查看具體某一個(gè)sql的索引使用情況 :
7.索引的不足
1.在創(chuàng)建索引和維護(hù)索引 會(huì)耗費(fèi)時(shí)間,隨著數(shù)據(jù)量的增加而增加
2.索引文件會(huì)占用物理空間,除了數(shù)據(jù)表需要占用物理空間之外,每一個(gè)索引還會(huì)占用一定的物理空間
3.當(dāng)對(duì)表的數(shù)據(jù)進(jìn)行 INSERT,UPDATE,DELETE 的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就會(huì)降低數(shù)據(jù)的維護(hù)速度,(建立索引會(huì)占用磁盤空間的索引文件。一般情況這個(gè)問(wèn)題不太嚴(yán)重,但如果你在一個(gè)大表上創(chuàng)建了多種組合索引,索引文件的會(huì)膨脹很快)。
8.注意事項(xiàng)
1.在經(jīng)常需要搜索的列上,可以加快索引的速度
2.主鍵列上可以確保列的唯一性
3.在表與表的而連接條件上加上索引,可以加快連接查詢的速度
4.在經(jīng)常需要排序(order by),分組(group by)和的distinct 列上加索引 可以加快排序查詢的時(shí)間, ?(單獨(dú)order by?用不了索引,索引考慮加where?或加limit)
5.在一些where 之后的 < <= > >= BETWEEN IN 以及某個(gè)情況下的like 建立字段的索引(B-TREE)
6.like語(yǔ)句的 如果你對(duì)nickname字段建立了一個(gè)索引.當(dāng)查詢的時(shí)候的語(yǔ)句是 nickname lick '%ABC%' 那么這個(gè)索引講不會(huì)起到作用.而nickname lick 'ABC%' 那么將可以用到索引
7.索引不會(huì)包含NULL列,如果列中包含NULL值都將不會(huì)被包含在索引中,復(fù)合索引中如果有一列含有NULL值那么這個(gè)組合索引都將失效,一般需要給默認(rèn)值0或者 ' '字符串
8.使用短索引,如果你的一個(gè)字段是Char(32)或者int(32),在創(chuàng)建索引的時(shí)候指定前綴長(zhǎng)度 比如前10個(gè)字符 (前提是多數(shù)值是唯一的..)那么短索引可以提高查詢速度,并且可以減少磁盤的空間,也可以減少I/0操作.
9.不要在列上進(jìn)行運(yùn)算,這樣會(huì)使得mysql索引失效,也會(huì)進(jìn)行全表掃描
10.選擇越小的數(shù)據(jù)類型越好,因?yàn)橥ǔT叫〉臄?shù)據(jù)類型通常在磁盤,內(nèi)存,cpu,緩存中 占用的空間很少,處理起來(lái)更快
9.索引方式 HASH和 BTREE比較
(1)HASH
用于對(duì)等比較,如"="和" <=>"
(2)BTREE
BTREE索引看名字就知道索引以樹(shù)形結(jié)構(gòu)存儲(chǔ),通常用在像 "=,>,>=,
通過(guò)比較發(fā)現(xiàn),我們常用的是BTREE索引方式,當(dāng)然Mysql默認(rèn)就是BTREE方式。
總結(jié)
以上是生活随笔為你收集整理的mysql最常用的索引_mysql常用索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 加索引不起作用_mysql加
- 下一篇: mysql删除默认密码_修改mysql默