一、對查詢進行優化,避免全表掃描,首先應考慮在where及order by涉及的列上創建索引。html
二、避免在where子句對字段進行null值判斷,不然會致使引擎放棄使用索引而進行全表掃描。sql
三、應儘可能避免在where子句中使用!=或者<>操做符,不然引擎放棄索引使用全表掃描。函數
四、應儘可能避免在where子句中使用or來鏈接條件,不然將致使引擎放棄使用索引而進行全表掃描(能夠考慮使用union鏈接來替代)。性能
五、in 和 not in 也要慎用,不然會致使全表掃描(對於連續的數值能用between就不要用in)。優化
六、使用了`%xxx%`或者`%xxx`致使全表掃描,(若要提升效率考慮使用覆蓋索引)。
七、應儘可能避免在where子句中對字段進行表達式或者函數操做,這將致使引擎放棄使用索引而進行全表掃描。spa
八、在使用索引字段做爲條件時,若是該索引是符合索引,那麼必須使用到該索引中第一個字段做爲條件時才能保證系統使用到該索引,不然該索引不被使用,而且應儘量的讓字段順序與索引順序相一致(雖然MySQL底層會優化)設計
九、不少時候使用 exists 代替 in 是一個很不錯的選擇code
select num from a where num in(select num from b) 用下面的語句替換: select num from a where exists(select 1 from b where num=a.num)
十、並非全部索引對查詢都有效,SQL是根據表中數據來進行查詢優化的,當索引列有大量數據重複時,SQL查詢可能不會去利用索引,如一表中 有字段sex,male、female幾乎各一半,那麼即便在sex上建了索引也對查詢效率起不了做用。htm
十一、索引並非越多越好,索引當然能夠提升相應的select查詢效率,可是同時也下降了insert和update的效率,由於insert和update有可能會重建索引,一個表的索引數最好不要超過6個。blog
十二、儘可能使用數字型字段,若只含數值型字段儘可能不要設計爲字符型,這會下降鏈接和查詢性能,並會增長存儲開銷,這是由於引擎在處理鏈接查詢和鏈接時會逐個比較字符串中每一個字符,而對於數值型比較一次就夠了。
1三、儘可能使用可變長度類型varchar, 由於首先變長字段存儲空間小,能夠節省存儲空間,其次對於查詢來講,在一個相對較小的字段內搜索效率顯然要高些。
1四、 任何地方都不要使用 select * from t ,用具體的字段列表代替「*」,不要返回用不到的任何字段。
本文參考: