數據庫優化方法
常見的數據庫優化方法:索引(數據庫),緩存,分表,分庫,sql優化。
索引:創建索引一般有以下兩個目的:維護被索引列的唯一性和提供快速訪問表中數據的策略。95% 的數據庫能問題都可以采用索引技術得到解決。索引有助于提高檢索性能,但過多或不當的索引也會導致系統低效。因為用戶在表中每加進一個索引,數據庫就要做 更多的工作。過多的索引甚至會導致索引碎片。
緩存:hibernate,spring3有緩存模塊
分表:針對每個時間周期產生大量的數據,可以考慮采用一定的策略將數據存到多個數據表中。
分庫:就是將系統按照模塊相關的特征分布到不同的數據中,以提高系統整體負載能力。
sql優化:
1.in 和 not in 也要慎用,因為IN會使系統無法使用索引,而只能直接搜索表中的數據。如:
select id from t where num in(1,2,3)對于連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
2.當判斷真假是,如果帶and 或者 or :
(當存在 “where 條件1 and 條件2” 時,數據庫先執行右邊的語句)
and盡量把假的放到右邊(一個為假就為假) Or盡量把為真的放到右邊(一個為真就為真)
3.應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。 如:
SELECT * FROM T1 WHERE F1/2=100
應改為:
SELECT * FROM T1 WHERE F1=100*2
SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’
應改為:
SELECT * FROM RECORD WHERE CARD_NO LIKE ‘5378%’
SELECT member_number, first_name, last_name FROM members
WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
應改為:
SELECT member_number, first_name, last_name FROM members
WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時 要盡可能將操作移至等號右邊。