談到資料庫,大家第一想法就是怎麼去優化,怎麼讓查詢操作更快。我認為最好的方式就是從開始資料庫設計的時候就要盡量考慮周全。如果不幸是個老專案,就得從優化入手了。接下就從設計和優化談一下我的一些認識和經驗。
1:資料庫的設計
乙個好的資料庫設計方案對於資料庫的效能常常會起到事半功倍的效果。資料庫的設計包含資料庫架構和業務表的設計。
1)資料庫架構
根據不同的資料量和訪問量,來設計不同的架構。適合自己的才是最好的。
2)業務表的設計
常見業務表分類:
(1)配置表
這種表通常存放業務一些基礎的配置資訊或者字典資訊。表的資料量一般都比較小,修改變化的操作不太頻繁,通常都是select查詢操作。
(2)狀態表
(3)日誌表
這種表通常用來記錄業務系統中某種實體的狀態資訊,常見的有使用者登入表、充值資訊記錄表等。這種表的資料規模通常比較大,而且如果業務狀態變化頻繁,記錄的變化資訊比較多,這種表的資料量和插入效能都要求比較高。日誌表的操作,通常會以insert操作為主,個別業務會對日誌表進行查詢。mysql五種特殊需求架構中的高效能寫入架構,主要就是應用這種表的需求。
(4)歸檔表
這種表,是將上面三種oltp業務表的資料進行歸檔或者冷熱分離的表。對線上業務三類表進行資料歸檔、冷熱分離,一方面可以控制線上業務表的資料規模,保證業務表效能;另一方面進行歸檔後,可用於對歸檔歷史資料進行更好的查詢反映和支援。歸檔表的資料量大小與對應的線上表大小、歸檔週期有關。歸檔表的操作,除了歸檔過程的資料載入外,主要就是select查詢操作了,歸檔後就算是唯讀表。
(5)統計資料表
統計資料表,是指業務有離線統計分析需求時,需要將各種線上表和歸檔表的資料,通過etl過程流轉到線上olap統計分析系統中的原始資料表。這類表通常資料量會非常大,乙個olap統計分析平台會彙總多個線上業務系統的資料進行統計分析。統計資料表的操作,除了資料流轉動作外,主要就是各種統計分析程式的訪問計算。
(6)統計結果表
統計結果表是在業務有離線統計分析需求時,各種統計分析過程訪問統計資料表中的資料,按照一定的邏輯進行統計分析後的結果資料。這種統計結果資料,通常資料量會比較小。統計結果表的操作,處理結果流轉動作外,主要就是供訪問介面進行select查詢。
對業務表型別的梳理,可以對所有的業務系統進行乙個大體的劃分,做到心中有數。
下面是設計表的一些經驗:
2:資料庫的優化(mysql)
說起mysql優化,一定要了解一下mysql原理,這樣才能深入的理解那些sql規則。下圖展示了mysql的邏輯架構圖。
mysql客戶端/服務端通訊協議是「半雙工」的:在任一時刻,要麼是伺服器向客戶端傳送資料,要麼是客戶端向伺服器傳送資料,這兩個動作不能同時發生。一旦一端開始傳送訊息,另一端要接收完整個訊息才能響應它,所以我們無法也無須將乙個訊息切成小塊獨立傳送,也沒有辦法進行流量控制。客戶端用乙個單獨的資料報將查詢請求傳送給伺服器,所以當查詢語句很長的時候,需要設定max_allowed_packet引數。當伺服器響應客戶端請求時,客戶端必須完整的接收整個返回結果,而不能簡單的只取前面幾條結果,然後讓伺服器停止傳送。因而在實際開發中,盡量保持查詢簡單且只返回必需的資料,減小通訊間資料報的大小和數量是乙個非常好的習慣,這也是查詢中盡量避免使用select *以及加上limit限制的原因之一。
1)sql的優化。通過explain和show profiles進行執行計畫分析,找出問題,進行針對性的優化。其中建立高效索引是最有效的乙個手段。
2)合理設定mysql的部分引數,達到最高效。
資料庫的那些事(全是乾貨)
談到資料庫,大家第一想法就是怎麼去優化,怎麼讓查詢操作更快。我認為最好的方式就是從開始資料庫設計的時候就要盡量考慮周全。如果不幸是個老專案,就得從優化入手了。接下就從設計和優化談一下我的一些認識和經驗。1 資料庫的設計 乙個好的資料庫設計方案對於資料庫的效能常常會起到事半功倍的效果。資料庫的設計包含...
資料庫的那些事(全是乾貨)
談到資料庫,大家第一想法就是怎麼去優化,怎麼讓查詢操作更快。我認為最好的方式就是從開始資料庫設計的時候就要盡量考慮周全。如果不幸是個老專案,就得從優化入手了。接下就從設計和優化談一下我的一些認識和經驗。1 資料庫的設計 乙個好的資料庫設計方案對於資料庫的效能常常會起到事半功倍的效果。資料庫的設計包含...
資料庫的那些事
一 常用的sql命令 1.select 獲取資料 2.update 更新資料 3.delete 刪除資料 4.insert into 插入新資料 5.create database 建立新資料庫 6.alter database 修改資料庫 7.create table 建立新錶 8.alter t...