mysql 提供了兩個方法來處理 ip 位址
• inet_aton 把 ip 轉為無符號整型 (4-8 位)
• inet_ntoa 把整型的 ip 轉為位址
插入資料前,先用 inet_aton 把 ip 位址轉為整型,可以節省空間,顯示資料時,使用 inet_ntoa 把整型的 ip 位址轉為位址顯示即可。
b.對於非負型的資料 (如自增 id,整型 ip) 來說,要優先使用無符號整型來儲存
原因:無符號相對於有符號可以多出一倍的儲存空間
signed int -2147483648~2147483647
unsigned int 0~4294967295
varchar(n) 中的 n 代表的是字元數,而不是位元組數,使用 utf-8 儲存 255 個漢字 varchar(255)=765 個位元組。過大的長度會消耗更多的記憶體。
修改 enum 值需要使用 alter 語句
enum 型別的 order by 操作效率低,需要額外操作
禁止使用數值作為 enum 的列舉值
timestamp 儲存的時間範圍 1970-01-01 00:00:01 ~ 2038-01-19-03:14:07
timestamp 占用 4 位元組和 int 相同,但比 int 可讀性高
超出 timestamp 取值範圍的使用 datetime 型別儲存
經常會有人用字串儲存日期型的資料(不正確的做法)
• 缺點 1:無法用日期函式進行計算和比較
• 缺點 2:用字串儲存日期要占用更多的空間
decimal 型別為精準浮點數,在計算時不會丟失精度
占用空間由定義的寬度決定,每 4 個位元組可以儲存 9 位數字,並且小數點要占用乙個位元組
可用於儲存比 bigint 更大的整型資料
超 100 萬行的批量寫 (update,delete,insert) 操作,要分批多次進行操作
大批量操作可能會造成嚴重的主從延遲
主從環境中,大批量操作可能會造成嚴重的主從延遲,大批量的寫操作一般都需要執行一定長的時間, 而只有當主庫上執行完成後,才會在其他從庫上執行,所以會造成主庫與從庫長時間的延遲情況
binlog 日誌為 row 格式時會產生大量的日誌
大批量寫操作會產生大量日誌,特別是對於row 格式二進位制資料而言,由於在row格式中會記錄每一行資料的修改,我們一次修改的資料越多,產生的日誌量也就會越多,日誌的傳輸和恢復所需要的時間也就越長,這也是造成主從延遲的乙個原因
避免產生大事務操作
大批量修改資料,一定是在乙個事務中進行的,這就會造成表中大批量資料進行鎖定,從而導致大量的阻塞,阻塞會對 mysql 的效能產生非常大的影響。
特別是長時間的阻塞會佔滿所有資料庫的可用連線,這會使生產環境中的其他應用無法連線到資料庫,因此一定要注意大批量寫操作要進行分批
對於大表使用 pt-online-schema-change 修改表結構
• 避免大表修改產生的主從延遲
• 避免在對表字段進行修改時進行鎖表
對大表資料結構的修改一定要謹慎,會造成嚴重的鎖表操作,尤其是生產環境,是不能容忍的。
pt-online-schema-change 它會首先建立乙個與原表結構相同的新錶,並且在新表上進行表結構的修改,然後再把原表中的資料複製到新錶中,並在原表中增加一些觸發器。把原表中新增的資料也複製到新錶中,在行所有資料複製完成之後,把新錶命名成原表,並把原來的表刪除掉。把原來乙個 ddl 操作,分解成多個小的批次進行。
禁止為程式使用的賬號賦予 super 許可權
• 當達到最大連線數限制時,還執行 1 個有 super 許可權的使用者連線
• super 許可權只能留給 dba 處理問題的賬號使用
對於程式連線資料庫賬號,遵循許可權最小原則
• 程式使用資料庫賬號只能在乙個db下使用,不准跨庫
• 程式使用的賬號原則上不准有drop許可權
高效能Mysql筆記 優化
了解查詢的整個生命週期,清楚每個階段的時間消耗情況 參考select profiling 檢視profiling是否開啟 set profiling 1 開啟profiling show profiles 檢視每條查詢的效能 show profile for query id 檢視query id的...
《高效能MySQL》之MySQL查詢效能優化
響應時間過長。如果把查詢看做是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果要優化查詢,實際上優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。查詢的生命週期 客戶端 伺服器 伺服器上解析 生成執行計畫 執行 返回結果給客戶端。其中 執行...
Mysql效能優化小建議
mysql的效能優化主要參考文章 1 2 和 3 其中已使用且比較有效果的有 1 禁止autocommit,防止每次插入都提交,重新整理log set autocommit 0 sql import statements commit 2 對頻繁查詢的字段建立索引,但要注意加入索引後,執行插入操作時...