1 邏輯數據庫和表的設計
數據庫的邏輯設計、包括表與表之間的關系是優化關系型數據庫性能的核心。一個好的邏輯數據庫設計可以為優化數據庫和應用程序打下良好的基礎。
標准化的數據庫邏輯設計包括用多的、有相互關系的窄表來代替很多列的長數據表。下面是一些使用標准化表的一些好處。
A:由於表窄,因此可以使排序和建立索引更為迅速
B:由於多表,所以多镞的索引成為可能
C:更窄更緊湊的索引
D:每個表中可以有少一些的索引,因此可以提高insert update delete等的速度,因為這些操作在索引多的情況下會對系統性能產生很大的影響
E:更少的空值和更少的多余值,增加了數據庫的緊湊性由於標准化,所以會增加了在獲取數據時引用表的數目和其間的連接關系的復雜性。太多的表和復雜的連接關系會降低服務器的性能,因此在這兩者之間需要綜合考慮。
定義具有相關關系的主鍵和外來鍵時應該注意的事項主要是:用於連接多表的主鍵和參考的鍵要有相同的數據類型。
2 索引的設計
A:盡量避免表掃描
檢查你的查詢語句的where子句,因為這是優化器重要關注的地方。包含在where裡面的每一列(column)都是可能的侯選索引,為能達到最優的性能,考慮在下面給出的例子:對於在where子句中給出了column1這個列。
下面的兩個條件可以提高索引的優化查詢性能!
第一:在表中的column1列上有一個單索引
第二:在表中有多索引,但是column1是第一個索引的列
避免定義多索引而column1是第二個或後面的索引,這樣的索引不能優化服務器性能
例如:下面的例子用了pubs數據庫。
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = ’White’
按下面幾個列上建立的索引將會是對優化器有用的索引
?au_lname
?au_lname, au_fname
而在下面幾個列上建立的索引將不會對優化器起到好的作用
?au_address
?au_fname, au_lname