天天看點

SQL資料庫優化--基礎

在做開發過程中,性能與品質問題是必須一緻考慮的,而資料庫的優化則是首當其沖的

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、其他優化