資料庫最佳化原則,最佳化原則

來源:互聯網
上載者:User

資料庫最佳化原則,最佳化原則
最近資料庫課程設計,我總結了一下資料庫的最佳化方法,希望對有需要的人能有協助:
1.對查詢進行最佳化,盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:

    select id from p where num is null
  可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
    select id from p where num=0

3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

4.應盡量避免在 where 子句中使用 or 來串連條件,否則將導致引擎放棄使用索引而進行全表掃描,如:

    select id from p where num=8 or num=12
  可以這樣查詢:
    select id from p where num=8    union all    select id from p where num=12
5.in 和 not in 也要慎用,否則會導致全表掃描,如:

    select id from p where num in(1,2,3)
對於連續的數值,能用 between 就不要用 in 了:

    select id from p where num between 1 and 3
6.下面的查詢也將導致全表掃描:
   select id from p where name like '%abcd%'
  若要提高效率,可以考慮全文檢索索引。

7.如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變數,但最佳化程式不能將訪問計劃的選擇延遲到運行時;它必須在編譯時間進行選擇。然而,如果在編譯時間建立訪問計劃,變數的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:

    select id from p where num=@number
可以改為強制查詢使用索引:

    select id from p with(index(索引名)) where num= @number
8.應盡量避免在 where 子句中對欄位進行運算式操作,這將導致引擎放棄使用索引而進行全表掃描。如:

    select id from t where num/2=10
應改為:

select id from t where num=10*2
9.應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。如:
select id from t where substring(name,1,3)='abc'--name以abc開頭的id
  select id from t where datediff(day,createdate,'2014-12-30')=0--‘2014-12-30’產生的id

10.主鍵是必要的,SQL SERVER的主鍵同時是一個唯一索引,而且在實際應用中,我們往往選擇最小的鍵組合作為主鍵,所以主鍵往往適合作為表的叢集索引。在有多個鍵的表,主鍵的選擇也比較重要,一般選擇總的長度小的鍵,小的鍵的比較速度快,同時小的鍵可以使主鍵的B樹結構的層次更少。主鍵的選擇還要注意組合主鍵的欄位次序,對於組合主鍵來說,不同的欄位次序的主鍵的效能差別可能會很大,一般應該選擇重複率低、單獨或者組合查詢可能性大的欄位放在前面。

11.資料類型盡量用數字型,數字型的比較比字元型的快很多。

12.資料類型盡量小,這裡的盡量小是指在滿足可以預見的未來需求的前提下的。

13.盡量不要允許NULL,除非必要,可以用預設值代替。

14.少用TEXT和IMAGE,二進位欄位的讀寫是比較慢的,而且,讀取的方法也不多,大部分情況下最好不用。

15.自增欄位要慎用,不利於資料移轉。

16.適用檔案組可以有效把I/O操作分散到不同的物理硬碟,提高並發能力。

17.一個表不要加太多索引,因為索引影響插入和更新的速度。

18.適當的使用冗餘的反範式設計,以空間換時間有的時候會很高效。

19.聯表查詢的時候,記得把小結果集放在前面,遵循小結果集驅動大結果集的原則。

20.查詢儘可能使用limit減少返回的行數,減少資料轉送時間和頻寬浪費。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.