常用數據庫優化
數據庫優化自然是我們經常需要注意的地方,尤其使用mybatis的人知道,XML中sql一目了然,一旦你的sql寫的不夠超前,就會受到別人的指點,說這個可以這樣改改,那個可以那樣改改。起初,對于老程序員的指指點點本人總是不以為然,后面漸漸就發現,有些基礎東西我們必須去學會、去運用。
數據庫的優化自然是一個很深奧的東西,尤其是Oracle。這里就不討論那些深奧有難懂的東西了,本人使用Sqlserver 、PostgreSQL 、MySQL 等,所以,這些關系型數據庫的優化大多是差不多了,這里指給出最常見,最基礎的東西;
第一類問題:查詢語句中盡量減少全表掃描
查詢緩慢很多都是因為語句執行時引擎放棄索引搜索而直接采用了全表掃描,具體如下:
1、where 條件 以及 order by 涉及的列應該為該列建立索引
2、where 條件中避免對字段進行null判斷,所以建議為字段設置默認值
3、where 條件中避免使用or,建議使用union all 替代 or
4、where 條件中避免使用 in not in ,本周就是or,建議使用exist 代替
5、where 條件中避免使用 like ‘%some%’,模糊查詢或者使用like都會全表檢索
6、where 條件中避免運算或函數操作,應該把運算放在關系條件的右邊,等待預編譯計算
7、where 條件中避免使用1=1,盡管這樣處理在代碼中是非常靈活的
8、count(*)應該改成count(1)
第二類問題:其他優化,以及個人建議
9、varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,其次對于查詢來說,在一個相對較小的字段內搜索效率要高些。
10、delete insert update 都會進行鎖表,所以對于經常進行查詢的關系,應該盡量把經常操作的字段和經常查詢的字段進行分離成兩個關系分別存儲
11、盡量少使用select *,沒用的字段不需要返回