在做開發過程中,性能與品質問題是必須一緻考慮的,而資料庫的優化則是首當其沖的
1、表設計
根據業務的不同而設計不同的表格,
重複列能夠提升性能,再通過觸發器維護列資訊一緻即可
縱向分區,将一個表分成多個表,當大資料量的時候,也可以進行橫向表分區,将曆史資料放入到其他表中,保持資料量小,輕便快捷
2、硬體平台選擇
這是資料庫工程師的事情
3、查詢優化
查詢分析、索引選擇、合并選擇
首先利用工具進行查詢分析,分析出可優化的部分
對于常更新的列不要建立索引,否則會嚴重影響性能,因為頻繁的索引重建會導緻性能降低
查詢條件盡量加索引
法則:不要在建立的索引的資料列上進行下列操作:
◆避免對索引字段進行計算操作
◆避免在索引字段上使用not,<>,!=
◆避免在索引列上使用IS NULL和IS NOT NULL
◆避免在索引列上出現資料類型轉換
◆避免在索引字段上使用函數
◆避免建立索引的列中使用空值。
4、SQL優化
“=”操作符的WHERE子句性能最好,其次是封閉的區間(範圍),再其次是開放的區間。
2.從資料庫通路的角度看,含有不連續連接配接詞(OR和IN)的WHERE子句一般來說性能不會太好。
3.包含NOT、<>、或! =的WHERE子句對于優化器的索引選擇來說沒有什麼用處。因為這樣的子句是排斥性的,而不是包括性的,是以在掃描整個原來資料表之前無法确定子句的選擇性。
限制資料轉換和串操作,優化器一般不會根據WHERE子句中的表達式和資料轉換式生成索引選擇。例如:
paycheck * 12>36000 or substring(lastname,1,1)=“L”
如果該表建立了針對paycheck和lastname的索引,就不能利用索引進行優化,可以改寫上面的條件表達式為:
paycheck<36000/12 or lastname like “L%”
5.查詢的模糊比對
盡量避免在一個複雜查詢裡面使用 LIKE '%parm1%'—— 紅色辨別位置的百分号會導緻相關列的索引無法使用,最好不要用.
解決辦法:
其實隻需要對該腳本略做改進,查詢速度便會提高近百倍。改進方法如下:
a、修改前台程式——把查詢條件的供應商名稱一欄由原來的文本輸入改為下拉清單,使用者模糊輸入供應商名稱時,直接在前台就幫忙定位到具體的供應商,這樣在調用背景程式時,這列就可以直接用等于來關聯了。
b、直接修改背景——根據輸入條件,先查出符合條件的供應商,并把相關記錄儲存在一個臨時表裡頭,然後再用臨時表去做複雜關聯
6、where語句中,盡量避免對索引字段進行計算操作
7、不要以字元串格式申明數值類型
8、避免在WHERE子句中使用in,not in,or 或者having
5、其他優化