資料庫設計和使用的一些常用好習慣,資料庫設計好習慣

來源:互聯網
上載者:User

資料庫設計和使用的一些常用好習慣,資料庫設計好習慣

好的習慣,需要不斷的培養和強化,直到成為一種習慣,然後成為思想的一部分。

    上班前或者下班後,有空我都要給我家小傢伙讀一讀《三字經》或者《弟子規》,他可能並不懂這些文字的內容,但是我希望這些知識能夠陪伴他長大,成為思想和行動的一部分。

    我們設計系統架構、做資料庫規劃的時候,也有一些基本的原則。

不知道沒有關係,多學習就知道了

不懂沒有關係,多看幾次就懂了

持之以恒就是人生。

 

    資料庫常用的好習慣記錄下來,沒事就翻翻。

設計表和索引等

1.   選擇合適的小欄位,可以減少資料庫行資料的大小,並提高索引匹配的效率,進而提升資料庫效能。如日期採用date代替datetime、類型或標記使用tinyint代替smallint和int、使用定長欄位代替非定長欄位(如char代替varchar2),都能或多或少減少資料行大小,提高資料庫緩衝池的命中率;

 

2.   主鍵,其選型更會對錶索引的穩定和效率帶來很大的影響,一般建議考慮資料庫自增或自主維護的唯一數值。

 

3.   適當的冗餘一些資料,這樣在設計表的時候雖然不舒服,但是可以提高很多效能;

 

4.   如果業務內容比較多,不要把所有欄位都放到一個表中,這樣資料表空間會很大,查詢速度會很慢,要明確“哪些欄位常用,哪些欄位不常用”,盡量把不常用的欄位放在附表裡面,與主表一對一關聯。

 

5.   在高分離度欄位建立索引,比如使用者表中的電話號碼欄位,索引的效率會非常高;

 

6.   類型,狀態等內容基本變化不多的欄位,原則上用位元影像索引比普通索引有效些,但是建立使用位元影像索引,必須要驗證效率是否得到提升;

 

7.  不要太依賴於建索引,一般而言,建立索引會提升相應的查詢速度,但是索引太多,會影響輸入的寫入。

 

使用表的一些習慣

1.  正如我們編寫JAVA程式,可以多利用Apache Commons工具包一樣,多利用Oracle內建的內建函式不僅可以提升開發效率,也能提高Sql語句執行效率;

 

2.  盡量把sql語句寫成 dm=? ,然後再賦值,而不是直接dm=9,這樣oracle每次執行都要編譯這條語句,而前面的那種方法,oracle只編譯一次。

 

3.  Exists比in 的效率大多數時候都會高,具體在選擇IN或EXIST操作時,要根據主子表資料量大小來具體考慮。

3.

4.  Not in最好在代碼中不要出現,效率不高,如果一定要用,可以用 minus 或則not exists代替。

4.

5.  where條件中,盡量不要用to_char,to_date,upper等方法進行格式轉換。轉換和計算操作盡量放=右邊,如果在左邊進行了轉換,那麼會進行全表掃描;如果索引不是基於函數的,那麼當在Where子句中對索引列使用函數時,索引不再起作用。

 

6.  不要把很複雜的邏輯用一條語句來實現,如果這種複雜的語句執行效果不理想,可以嘗試把它拆開成簡單的語句,看看效率是否提升。

 

7.  盡量不要用“<>”或者“!=”操作符。對不等於操作符的處理會造成全表掃描,可以用“<” or “>”代替。例如:a<>0改為 a>0 or a<0,a<>’’ 改為 a>’ ’,用“>=”替代“>”。

 

8.  Where子句中出現IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執行全表掃描。可以考慮在設計表時,對索引列設定為NOTNULL。這樣就可以用其他動作來取代判斷NULL的操作。

8.

9.  當萬用字元“%”或者“_”作為查詢字串的第一個字元時,索引不會被使用,因此一般不要作為第一個字元出現。或者儘可能不用這種方式;

 

10.  對於有串連的列“||”,最後一個串連列索引會無效。盡量避免串連,可以分開串連或者使用不作用在列上的函數替代。

10.

11.  對資料類型不同的列進行比較時,會使索引失效。

 

12.  UNION操作符會對結果進行篩選,消除重複,資料量大的情況下可能會引起磁碟排序。如果不需要重複資料刪除記錄,應該使用UNION ALL。

12.

13.  Oracle從下到上處理Where子句中多個查詢條件,所以表串連語句應寫在其他Where條件前,可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾。Oracle從右至左處理From子句中的表名,所以在From子句中包含多個表的情況下,將記錄最少的表放在最後。Oracle10g以及以上的版本,以及對這個問題就進行了最佳化,但是這個習慣還是不錯的,值得保留。

 

14.  OrderBy語句中的非索引列會降低效能,可以通過添加索引的方式處理。如果排序的資料量比較大,對效能的影響非常大,盡量避免使用。唯一性索引是一個比較好的折中方法;

相關文章

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.