優化效果(從大到小):
硬體裝置 -> mysql資料庫 -> linux作業系統 -> 表設計
硬體裝置優化
提公升硬體裝置,例如使用ssd高速磁碟,cpu等。
mysql資料庫配置優化
# 物理記憶體的50%~80%,這裡為
innodb_buffer_pool_size=2000000000
# 雙1模式
# 按事物刷盤,刷日誌
innodb_flush_log_at_trx_commit=1
# 提交1次事物刷1次,可以為n
sync_binlog=1
# 髒頁佔innodb_buffer_pool_size的比例時,觸發刷髒頁到磁碟
# 25%~50%
innodb_max_dirty_pages_pct=30
# 後台程序最大io效能指標
# 預設200,如果ssd,調整為5000~20000
innodb_io_capacity=200
# 預設10m。防止高併發下,資料庫受影響
innodb_data_file_path=ibdata1:1024m:autoextend
# 預設2,單位s。慢查詢時間。建議0.1~0.5
long_qurey_time=0.3
# 8.0預設row。記錄格式,讓資料安全可靠
binlog_format=row
# 預設8小時。互動等待時間和非互動等待時間
# 建議300~500s,兩引數值必須一致,且同時修改
interactive_timeout=500
wait_timeout=500
# 過大,容易oom(記憶體溢位)
# 調高該引數應降低interactive_timeout、wait_timeout的值
# 預設151
max_connections=200
# 過大,例項恢復時間長;過小,造成日誌切換頻繁
# 預設50331648,50mb
innodb_log_file_size=50331648
# 全量日誌建議關閉
# 預設關閉
general_log=0
linux作業系統層面優化
cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
修改為deadline或noop,cfq,嚴重影響資料庫效能
檔案系統採用xfs,其次是ext4,不用ext3
還有vm.dirty_background_ratio:預設10,建議不超過10
vm.dirty_ratio:預設20,建議不超過20
表設計及其他優化
1.庫名、表名、欄位名小寫,用「_」分隔。
2.使用自增列int或bigint作為主鍵
3.ipv4使用int儲存,inet_aton、inet_ntoa
4.***、status使用tinyint
5.業務表切忌出現大型別字段,sql避免or子句
6.只需獲取必要欄位時,避免使用select *,還可能用到覆蓋索引
7.建立索引在選擇性高的字段上,不要在***、status上建
8.單錶索參數量不要超過4~5個
9.欄位預設加上not null,避免出現null,count()統計不會計null
10.需要儲存表情需要utf8mb4
11.使用搜尋引擎sphinx替代模糊搜尋
12.explain執行計畫中的extra項中有using filesort或using temporary時,考慮建立排序索引和分組索引
13.pt-query-digest捕獲慢查詢語句
5(附加)
優化一條sql語句:
1.表的資料型別是否設計得合理,資料型別越簡單越小原則
2.表中碎片整理,alter table comment_infos engine = innodb;
3.檢視表的統計資訊,select * from information_schema.tables where table_name=」comment_infos」\g;
4.explain檢視執行計畫
5.建索引前檢視該字段的選擇性,越接近1越高,主鍵索引和唯一索引的選擇性是1
6.在檢視explain,對比索引效果。在合理的字段建立索引:經常出現在where後;經常order by或group by;經常表連線。
mysql8簡單密碼 MySQL8 0設定簡單密碼
一 問題描述 1 在安裝mysql8.0時,修改臨時密碼,因密碼過於簡單 如 123456 不符合mysql密碼規範,會觸發乙個報錯資訊 error 1819 hy000 your password does not satisfy the current policy requirements。二...
mysql8穩定嗎 mysql8 0新特性
1 隱藏索引 隱藏索引的特性對於效能除錯非常有用。在 8.0 中,索引可以被 隱藏 和 顯示 當乙個索引隱藏時,它不會被查詢優化器所使用。也就是說,我們可以隱藏乙個索引,然後觀察對資料庫的影響。如果資料庫效能有所下降,就說明這個索引是有用的,於是將其 恢復顯示 即可 如果資料庫效能看不出變化,說明這...
mysql8簡單密碼 MySQL8 0設定簡單密碼
一 問題描述 1 在安裝mysql8.0時,修改臨時密碼,因密碼過於簡單 如 123456 不符合mysql密碼規範,會觸發乙個報錯資訊 error 1819 hy000 your password does not satisfy the current policy requirements。二...