http://database.51cto.com/art/201407/445934.htm
1.對查詢進(jìn)行優(yōu)化机错,要盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引具练。
2.應(yīng)盡量避免在 where 子句中對字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
selectidfromtwherenumisnull
最好不要給數(shù)據(jù)庫留NULL罗洗,盡可能的使用 NOT NULL填充數(shù)據(jù)庫.
備注敬扛、描述育勺、評論之類的可以設(shè)置為?NULL线定,其他的野建,最好不要使用NULL属划。
不要以為?NULL?不需要空間,比如:char(100)?型候生,在字段建立時同眯,空間就固定了,?不管是否插入值(NULL也包含在內(nèi))唯鸭,都是占用?100個字符的空間的须蜗,如果是varchar這樣的變長字段,?null?不占用空間目溉。
可以在num上設(shè)置默認(rèn)值0唠粥,確保表中num列沒有null值,然后這樣查詢:
selectidfromtwherenum=0
3.應(yīng)盡量避免在 where 子句中使用 != 或 <> 操作符停做,否則將引擎放棄使用索引而進(jìn)行全表掃描晤愧。
4.應(yīng)盡量避免在 where 子句中使用 or 來連接條件,如果一個字段有索引蛉腌,一個字段沒有索引官份,將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:
selectidfromtwherenum=10orName='admin'
可以這樣查詢:
selectidfromtwherenum=10unionallselectidfromtwhereName='admin'
5.in 和 not in 也要慎用烙丛,否則會導(dǎo)致全表掃描舅巷,
6.下面的查詢也將導(dǎo)致全表掃描:
selectidfromtwherenamelike‘%abc%’
若要提高效率,可以考慮全文檢索河咽。
未完看鏈接