學(xué)習(xí)完整課程請(qǐng)移步 互聯(lián)網(wǎng) Java 全棧工程師
索引不會(huì)包含有
NULL
的列
只要列中包含有NULL
值蔑穴,都將不會(huì)被包含在索引中,復(fù)合索引中只要有一列含有NULL
值酥诽,那么這一列對(duì)于此符合索引就是無(wú)效的匙隔。使用短索引
對(duì)串列進(jìn)行索引,如果可以就應(yīng)該指定一個(gè)前綴長(zhǎng)度涌韩。例如畔柔,如果有一個(gè)char(255)
的列,如果在前10
個(gè)或20
個(gè)字符內(nèi)臣樱,多數(shù)值是唯一的靶擦,那么就不要對(duì)整個(gè)列進(jìn)行索引。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間和I/O
操作雇毫。索引列排序
MySql 查詢只使用一個(gè)索引奢啥,因此如果where
子句中已經(jīng)使用了索引的話,那么order by
中的列是不會(huì)使用索引的嘴拢。因此數(shù)據(jù)庫(kù)默認(rèn)排序可以符合要求的情況下不要使用排序操作桩盲,盡量不要包含多個(gè)列的排序,如果需要最好給這些列建復(fù)合索引席吴。like
語(yǔ)句操作
一般情況下不鼓勵(lì)使用like
操作赌结,如果非使用不可,注意正確的使用方式孝冒。like ‘%aaa%’
不會(huì)使用索引柬姚,而like ‘a(chǎn)aa%’
可以使用索引。不要在列上進(jìn)行運(yùn)算
不使用
NOT IN
庄涡、<>
量承、!=
操作,但<
,<=
撕捍,=
拿穴,>
,>=
,BETWEEN
,IN
是可以用到索引的索引要建立在經(jīng)常進(jìn)行select操作的字段上
這是因?yàn)椋绻@些列很少用到忧风,那么有無(wú)索引并不能明顯改變查詢速度默色。相反,由于增加了索引狮腿,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求腿宰。索引要建立在值比較唯一的字段上
對(duì)于那些定義為
text
、image
和bit
數(shù)據(jù)類型的列不應(yīng)該增加索引缘厢。因?yàn)檫@些列的數(shù)據(jù)量要么相當(dāng)大吃度,要么取值很少在
where
和join
中出現(xiàn)的列需要建立索引where
的查詢條件里有不等號(hào)(where column != …)
, MySql 將無(wú)法使用索引如果
where
字句的查詢條件里使用了函數(shù)(如:where DAY(column)=…)
, MySql 將無(wú)法使用索引在
join
操作中(需要從多個(gè)數(shù)據(jù)表提取數(shù)據(jù)時(shí)),MySql 只有在主鍵和外鍵的數(shù)據(jù)類型相同時(shí)才能使用索引贴硫,否則及時(shí)建立了索引也不會(huì)使用