1. 優化表的資料型別
在mysql 中,可以使用函式procedure analyse()對當前應用的表進行分析,該函式可以對資料表中列的資料型別提出優化建議,使用者可以根據應用的實際情況酌情考慮是否實施優化。
使用方法:
select *from tbl_name procedure analyse();
select * from tbl_name procedure analyse(16,256);
(不要為那些包含的值多於16 個或者256 位元組的enum 型別提出建議)
2. 通過拆分提高表的訪問效率
(1)垂直拆分:把主碼和一些列放到乙個表,把主碼和另外的列放到另乙個表中。如果乙個表中某些列常用,而另外一些列不常用,則可以採用垂直拆分,另外垂直拆分可以使得資料行變小,乙個資料
頁就能存放更多的資料,在查詢時就會減少i/o 次數。其缺點是需要管理冗餘列,查詢所有資料需要聯合(join)操作。
(2)水平拆分:根據一列或多列資料的值把資料行放到兩個獨立的表中。
通常在以下幾種情況下使用:
i. 表很大,分割後可以降低在查詢時需要讀的資料和索引的頁數,同時也降低了索引的層數,提高查詢速度。
ii. 表中的資料本來就有獨立性,例如,表中分別記錄各個地區的資料或不同時期的資料,特別是有些資料常用,而另外一些
資料不常用。
iii. 需要把資料存放到多個介質上。
水平拆分會給應用增加複雜度,它通常在查詢時需要多個表名,查詢所有資料需要union 操作。在許多資料庫應用中,
這種複雜性會超過它帶來的優點,因為只要索引關鍵字不大,則在索引用於查詢時,表中增加2 至3 倍資料量,查詢時也就增
加讀乙個索引層的磁碟次數,所以水平拆分要考慮資料量的增長速度,根據實際情況決定是否需要對錶進行水平拆分。
3. 逆規範化
反規範的好處是降低連線操作的需求、降低外碼和索引的數目,還可能減少表的數目,相應帶來的問題是可能出現資料的完整性問題。加快查詢速度,但會降低修改速度。因此決定做反規範時,一定要權衡利弊,仔細分析應用的資料訪問需求和
實際的效能特點,好的索引和其他方法經常能夠解決效能問題,而不必採用反規範這種方法。
常用的反規範技術有增加冗餘列、增加派生列、重新組表和分割表。
(1)增加冗餘列:指在多個表中具有相同的列,它常用來在查詢時避免連線操作。
(2)增加派生列:指增加的列來自其他表中的資料,由其他表中的資料經過計算生成。增加的派生列其作用是在查詢時減少
連線操作,避免使用集函式。
(3)重新組表:指如果許多使用者需要檢視兩個表連線出來的結果資料,則把這兩個表重新組成乙個表來減少連線而提高效能。
(4)分割表:根據需求將乙個表分割成多個表儲存。
逆規範技術需要維護資料的完整性。無論使用何種反規範技術,都需要一定的管理來維護資料的完整性,常用的方法是
批處理維護、應用邏輯和觸發器。
(1)批處理維護:指對複製列或派生列的修改積累一定的時間後,執行一批處理作業或儲存過程對複製或派生列進行修改,
這只能在對實時性要求不高的情況下使用。
(2)資料的完整性也可由應用邏輯來實現,這就要求必須在同一事務中對所有涉及的表進行增、刪、改操作。用應用邏輯來
實現資料的完整性風險較大,因為同一邏輯必須在所有的應用中使用和維護,容易遺漏,特別是在需求變化時,不易於維護。
(3)另一種方式就是使用觸發器,對資料的任何修改立即觸發對複製列或派生列的相應修改。觸發器是實時的,而且相應的
處理邏輯只在乙個地方出現,易於維護。一般來說,是解決這類問題比較好的辦法。
4. 使用中間表提高統計查詢速度
通常在這種情況下,使用中間表可以提高統計查詢的率。
使用中間表的優點:
(2)中間表上可以靈活的新增索引或增加臨時用的新字段,從而達到提高統計查詢效率和輔助統計查詢作用。
資料庫優化 資料庫設計優化
一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...
資料庫引擎優化顧問優化資料庫
現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...
利用物件池優化資料庫操作
說到物件池,大家都不陌生。很多人都實現過,網上的 也滿天飛。說到連線池,更是誰人不知,哪家不曉。也有不少人自己實現了連線池,試圖對資料訪問進行優化。歸納了一下,比較常見的思路如下 1.資料庫連線的開啟比較耗費資源,如果能避免重複的開關,可以提高效率。2.如果有乙個一直開啟資料庫連線,直到程式結束其生...