資料庫優化

2022-05-18 09:30:37 字數 2253 閱讀 5306

「垂直分割」是一種把資料庫中的表按列變成幾張表的方法,這樣可以降低表的複雜度和字段的數目,從而達到優化的目的。

示例一:在users表中有乙個欄位是家庭位址,這個欄位是可選字段,而在資料庫操作的時候除了個人資訊外,並不需要經常讀取或是改寫這個字段。那麼,為什麼不把它放到另外一張表中呢? 這樣會讓你的表有更好的效能。大量的時候,對於使用者表來說,只有使用者id,使用者名稱,口令,使用者角色等會被經常使用。小一點的表總是會有好的效能。

專案中有一張主表用於儲存各種業務的處理情況(包括呼叫是否成功、時間、業務型別、櫃員號等),通過公用的dao層操作獲取各業務場景的任務列表查詢;各業務場景有各自的業務表,用於儲存更多具體詳盡的資訊(包括呼叫第三方時的返回報文,如開戶及簽約介面會返回哪些成功哪些失敗及失敗原因,用於問題追蹤)。

示例二: 有乙個叫 「last_login」 的字段,會在每次使用者登入時被更新。但是,每次更新時會導致該錶的查詢快取被清空。所以,可以把這個字段放到另乙個表中,這樣就不會影響對使用者 id,使用者名稱,使用者角色的不停地讀取了,因為查詢快取會幫你增加很多效能。(涉及到mybatis二級快取?)另外,需要注意的是,這些被分出去的字段所形成的表,你不會經常性地去join他們,否則,這樣的效能會比不分割時還要差,而且,會是指數級的下降。

二級快取工作模式

在 mysql 中有兩個儲存引擎 myisam 和 innodb,每個引擎都有利有弊。myisam 適合於一些需要大量查詢的應用,但其對於有大量寫操作並不是很好。甚至你只是需要update乙個字段,整個表都會被鎖起來,而別的程序,就算是讀程序都無法操作直到讀操作完成。另外,myisam 對於 select count(*) 這類的計算是超快無比的。

innodb 的趨勢會是乙個非常複雜的儲存引擎,對於一些小的應用,它會比 myisam 還慢。但它支援「行鎖」 ,於是在寫操作比較多的時候,會更優秀。並且,他還支援更多的高階應用,比如:事務。

隨著innodb的優化與發展,一般都選擇mysql預設的innodb。

mysql行鎖、表鎖

while (1) 

// 每次都要休息一會兒

usleep(50000);

}

專案中刪除排隊機客戶資訊時,每次刪除5000條,若返回值大於等於5000則再次執行刪除動作。

delete from (

select * from table where add_time between # and # fetch first 40000 rows only

)

完全按照規範化設計的系統幾乎是不可能的,除非系統特別的小,在規範化設計後,有計畫地加入冗餘是必要的。

冗餘可以是冗餘資料庫、冗餘表或者冗餘字段,不同粒度的冗餘可以起到不同的作用。

冗餘可以是為了程式設計方便而增加,也可以是為了效能的提高而增加。從效能角度來說,冗餘資料庫,如集群可以分散資料庫壓力,雙機熱備保證高可用性(互為備份的兩台伺服器共同執行同一服務,其中一台主機為工作機(primary server),另一台主機為備份主機(standby server)。在系統正常情況下,工作機為應用系統提供服務,備份機監視工作機的運**況(一般是通過心跳診斷,工作機同時也在檢測備份機是否正常),當工作機出現異常,不能支援應用系統運營時,備份機主動接管工作機的工作,繼續支援關鍵應用服務,保證系統不間斷的執行);冗餘表可以分散資料量大的表的併發壓力,也可以加快特殊查詢的速度;冗餘字段可以有效減少資料庫表的連線,提高效率。

mysql雙機熱備實現

1.效能更高,因為資料庫對sql語句的語法檢查,語義分析、編譯、優化在第一次執行時已經完成,執行計畫會被快取起來;

2.避免sql注入。

有外來鍵約束會影響插入和刪除效能,如果程式能夠保證資料的完整性,那在設計資料庫時就去掉外來鍵。

其他方面

(1)提公升資料庫伺服器硬體配置,配置mysql效能優化引數,或者搭建資料庫集群。

(2)從系統層面增強mysql的效能:優化資料表結構、字段型別、字段索引、分表,分庫、讀寫分離等等。

(3)從資料庫層面增強效能:優化sql語句,合理使用字段索引。

(4)從**層面增強效能:使用快取和nosql資料庫方式儲存,如mongodb/memcached/redis來緩解高併發下資料庫查詢的壓力。

(5)減少資料庫操作次數,盡量使用資料庫訪問驅動的批處理方法。

(6)不常使用的資料遷移備份,避免每次都在海量資料中去檢索。

**:mysql效能優化

大彙總

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫引擎優化顧問優化資料庫

現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...

資料庫優化

資料庫優化 1 合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引 在頻繁進行排序或分組 即進行groupby或orderby操作 的列上建立索引...