數據庫優化方法

jopen 10年前發布 | 12K 次閱讀 數據庫

常見的數據庫優化方法:索引(數據庫),緩存,分表,分庫,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()) 

即:任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時 要盡可能將操作移至等號右邊。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!