mysql索引的不足
mysql索引盡管提高了查詢(xún)的速度,但是也并不是盡善盡美的,mysql索引也有著自身的不足之處,下面就讓我們一起來(lái)了解一下。
mysql索引的不足之處
過(guò)多的使用索引將會(huì)造成濫用。因此索引也會(huì)有它的缺點(diǎn):
◆雖然mysql索引大大提高了查詢(xún)速度,同時(shí)卻會(huì)降低更新表的速度,如對(duì)表進(jìn)行 INSERT、UPDATE和DELETE。因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。
◆建立mysql索引會(huì)占用磁盤(pán)空間的索 引文件。一般情況這個(gè)問(wèn)題不太嚴(yán)重,但如果你在一個(gè)大表上創(chuàng)建了多種組合索引,索引文件的會(huì)膨脹很快。
索引只是提高效率的一個(gè)因素,如果你的 MySQL有大數(shù)據(jù)量的表,就需要花時(shí)間研究建立***秀的索引,或優(yōu)化查詢(xún)語(yǔ)句。
使用mysql索引的注意事項(xiàng)
使用mysql索引時(shí),有以下一 些技巧和注意事項(xiàng):
◆索引不會(huì)包含有NULL值的列
只要列中包含有NULL值都將不會(huì)被包含在索引中,復(fù)合索引中只要有一列含有 NULL值,那么這一列對(duì)于此復(fù)合索引就是無(wú)效的。所以我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)時(shí)不要讓字段的默認(rèn)值為NULL。
◆使用短索引
對(duì)串列進(jìn) 行索引,如果可能應(yīng)該指定一個(gè)前綴長(zhǎng)度。例如,如果有一個(gè)CHAR(255)的列,如果在前10個(gè)或20個(gè)字符內(nèi),多數(shù)值是惟一的,那么就不要對(duì)整個(gè)列進(jìn) 行索引。短索引不僅可以提高查詢(xún)速度而且可以節(jié)省磁盤(pán)空間和I/O操作。
◆索引列排序
MySQL查詢(xún)只使用一個(gè)索引,因此如果 where子句中已經(jīng)使用了索引的話(huà),那么order by中的列是不會(huì)使用索引的。因此數(shù)據(jù)庫(kù)默認(rèn)排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個(gè)列的排序,如果需要***給這些列創(chuàng)建復(fù)合索引。
◆like語(yǔ)句操作
一般情況下不鼓勵(lì)使用like操作,如果非使用不可,如何使用也是一個(gè)問(wèn)題。like “%aaa%” 不會(huì)使用索引而like “aaa%”可以使用索引。
◆不要在列上進(jìn)行運(yùn)算
select * from users where YEAR(adddate)<2007;
將在每個(gè)行上進(jìn)行運(yùn)算,這將導(dǎo)致索引失效而進(jìn)行全表掃描,因此我們可以改成
select * from users where adddate<‘2007-01-01’;
◆不使用NOT IN和<>操作
【編輯推薦】