3.2 基本表設計優化
在基於表驅動的資訊管理系統中,基本表的設計規範是第三正規化。第三正規化的基本特徵 是非主鍵屬性只依賴於主鍵屬性。基於第三正規化的資料庫表設計具有很多優點:一是能消除 冗餘資料、節省磁碟儲存空間;二是有良好的資料完整性限制(基於主外來鍵的參照完整限制 和基於主鍵的實體完整性限制),這使得資料容易維護、移植和更新;三是資料的可逆性好, 在做連線查詢或者合併表時不遺漏、不重複;四是消除了冗餘資料(這裡主要指冗餘列), 使得查詢時每個資料頁儲存的資料行增多,這樣就有效地減少了邏輯i/o,同時也減少了物 理i/o;五是對大多數事務而言,執行效能好;六是物理設計的機動性較大,能滿足日益增 長的使用者需求。
基於第三正規化設計的庫表雖然有其優越性,然而在實際應用中有時不利於系統執行效能 的優化:例如需要部分資料時而要掃瞄整表,許多過程同時競爭同一資料,反覆用相同行計 算相同的結果,過程從多表獲取資料時引發大量的連線操作,當資料**於多表時的連線操 作;這都消耗了磁碟i/o 和cpu 時間。特別需要提出的是,在遇到下述情形時,我們要對 基本表進行擴充套件設計優化:許多過程要頻繁訪問乙個表、子集資料訪問、重複計算和冗餘數 據,有時使用者要求一些過程優先或低的響應時間,為避免以上不利因素,我們通常根據訪問 的頻繁程度對相關表進行分割處理、儲存冗餘資料、儲存衍生列、合併相關表處理,這些都 是克服這些不利因素和優化系統執行的有效途徑。
(1)分割表 分割錶可分為水平分割表和垂直分割表兩種:水平分割是按照行將乙個表分割為多個 表,這可以提高每個表的查詢速度,但是由於造成了多表連線,所以應該在同時查詢或更新 不同分割表中的列的情況比較少的情況下使用。垂直分割是對於乙個列很多的表,若某些列 的訪問頻率遠遠高於其它列,在不破壞第三正規化的前提下將主鍵和這些列作為乙個表,將主 鍵和其它列作為另外乙個表。一種是當多個過程頻繁訪問表的不同列時,可將表垂直分成幾 個表,減少磁碟i/o。通過減少列的寬度,增加了每個資料頁的行數,一次i/o 就可以掃瞄 更多的行,從而提高了訪問每乙個表的速度。垂直分割表可以達到最大化利用cache 的目的。 分割表的缺點是要在插入或刪除資料時要考慮資料的完整性,用儲存過程維護。
(2)儲存衍生資料 對一些要做大量重複性計算的過程而言,若重複計算過程得到的結果相同,或計算牽扯 多行資料需額外的磁碟i/o 開銷,或計算複雜需要大量的c p u 時間,就考慮儲存計算結果:若在一行或多行進行重複性計算,就在表內增加列儲存結果,但若參與計算的列被更新時, 必須要用觸發器或儲存過程更新這個新列。總之,儲存冗餘資料有利於加快訪問速度,但違 反了第三正規化,這會增加維護資料完整性的代價,必須用觸發器立即更新、或儲存過程更新, 以維護資料的完整性。
3.3 修改應用技術模式
引入「中間表」的概念,在實際單據未進入核心業務流程前,採用「中間表」的技術思 路,就是在實際使用者操作過程中,實際操作的是乙個臨時表,在進行資料某個階段審核(進 入下乙個環節)後,將臨時表的資料寫入正式表,並且刪除臨時表的資料,這樣始終保持用 戶操作表的固定的資料量而且控制增長,可以定期清除。 採用臨時表技術首先需將要操作的資料集插入到臨時表中,這會給系統帶來額外的開 銷。這裡假設臨時表中的資料集遠小於源資料表中的資料集,因此在進行資料連線操作或對 資料集進行頻繁讀操作時,系統的效能會提高幾倍甚至幾十倍不等。
並非所有情況都適宜用臨時表技術。一般來說,下面兩種情況適宜採用臨時表技術進行 處理:
(1)對資料量較大的表進行連線操作,並且連線操作的結果是乙個小結果集。
(2)對資料量較大的表進行頻繁訪問,訪問的範圍比較固定且比較集中。
合理使用臨時表技術,有助於提高應用系統對大資料表的實時處理的效能。
4.資料庫索引優化
索引是建立在表上的一種資料組織,它能提高訪問表中一條或多條記錄的特定查詢效 率。利用索引優化系統效能是顯而易見的,對所有常用於查詢中的where 子句的列和所有 用於排序的列建立索引,可以避免整表掃瞄或訪問,在不改變表的物理結構的情況下,直接 訪問特定的資料列,這樣可以減少資料訪問時間;利用索引可以優化或排除耗時的分類操作, 把資料分散到不同的頁面上,這樣就分散了插入的資料;主鍵自動建立了唯一索引,因此唯 一索引也能確保資料的唯一性(即實體完整性)。總之,索引可以加快查詢速度、減少i/o 操作、消除磁碟排序。 優化索引可以避免掃瞄整個表,減少因查詢造成的開銷。一般說來建立索引要注意以下 幾點:
(1)檢查被索引的列或組合索引的首列是否出現在pl/sql 語句的where 子句中, 這是「執行計畫」能用到相關索引的必要條件。比較一下列中唯一鍵的數量和表中記錄的行 數,就可以判斷該列的可選擇性。如果該列的「唯一鍵的數量/表中記錄行數」的比值越接近 於1,則該列的可選擇行越高。在可選擇性高的列上進行查詢,返回的資料就較少,比較適 合索引查詢。相反,比如性別列上只有兩個值,可選擇行就很小,不適合索引查詢。因此, 在查詢中經常作為條件表示式且不同值較多的列上建立索引,不同值較少的列上不要建立索 引。
(2)索引的建立也是需要代價的,對於刪除、某些更新、插入操作,對於每個索引都 要進行相應的刪除、更新、插入操作。從而導致刪除、某些更新、插入操作的效率變低。因 此頻繁進行刪除、插入操作的表不要建立過多的索引。
(3)查詢經常用到的列上建立非聚簇索引,在頻繁進行範圍查詢、排序、分組的列上 建立聚簇索引。
(4 )對於不存在重複值的列,建立唯一索引優於建立非唯一索引。
(5)當資料庫表更新大資料後,刪除並重新建立索引來提高查詢速度。
(6)當對乙個表的update 操作遠遠多於select 操作時,不應建立索引。
(7)如果索引列是函式的引數,則索引在查詢時用不上,該列也不適合索引。
2 資料庫調優二 count調優
create table user test count id int primary key not null auto increment,name varchar 45 age int,email varchar 60 birthday date engine innodb insert in...
資料庫調優 2 索引
一 建立索引技巧 應該選擇資料量大的表。應該選擇使用頻繁的字段上建立索引,如經常查詢的字段,排序的字段,用於where子句作為條件判斷的字段。經常用在連線的列。應該選擇重複值較小的字段上建立所以,例如使用者表 應該在使用者id上建立索引,而不是使用者的位址如省份或者性別。當修改效能遠遠大於檢索效能時...
資料庫調優
1 資料庫調優 計算機硬體調優 資料庫物件的放置策略 利用資料庫分割槽技術,均勻地把資料分布在系統的磁碟中,平衡i o 訪問,避免i o 瓶 頸 使用磁碟硬體優化資料庫 基本表設計優化 第三正規化的基本特徵 是非主鍵屬性只依賴於主鍵屬性。優點 一是能消除 冗餘資料 節省磁碟儲存空間 二是有良好的資料...