共計 2770 個字符,預計需要花費 7 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章主要介紹 MySQL 中優化的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
優化方向 SQL 優化
sql 優化分析
索引優化
優化數據庫對象
優化表的數據類型
表拆分(水平、垂直)
反范式
使用中間表
優化 mysql server
mysql 內存管理優化
log 機制及優化
調整 mysql 并發參數
應用優化
數據庫連接池
使用緩存減少壓力
負載均衡建立集群
主主同步、主從復制
Mysql 優化問題分析定位分析 SQL 執行頻率
show status
例如:分析讀為主,還是寫為主
定位執行效率低的 SQl
慢查詢日志定位 -log-slow-queries = xxx(指定文件名)SHOW PROCESSLIST 查看當前正在進行的線程,包括線程狀態、是否鎖表
分析 SQL 執行計劃
explain your sql desc your sql - 部分參數分析
select_type: SIMPLE 簡單表,不使用表連接或子查詢 PRIMARY 主查詢,即外層的查詢 UNION SUBQUER 子查詢的第一個 select
type: ALL 全表掃描
index 索引全掃描
range 索引范圍掃描
ref 使用非唯一索引或唯一索引的前綴掃描
eq_ref 類似 ref,使用的索引是唯一索引 const/system 單表中最多有一個匹配行 NULL 不用訪問表或者索引,直接得到結果
show profile 分析 SQL
select @@have_profiling 是否支持
select @@profiling 是否開啟
執行 your sql show profiles
show profile block io for QUERY 17
索引優化索引的存儲分類
B-TREE 索引:常見,大部分都支持 HASH 索引:只有 memory 引擎支持 R -TREE 索引:空間索引是 MyISAM 的一個特殊索引類型,主要用于地理空間數據類型
full-text 索引:全文索引,MyISAM 的一個特殊索引類型,innodb 從 5.6 開始支持
索引的創建與刪除
添加索引 ALTER Table `table_name` ADD PRIMARY KEY(`column`)ALTER Table `table_name` ADD UNIQUE(`column`)ALTER Table `table_name` ADD INDEX(`column`)ALTER Table `table_name` ADD FULLTEXT(`column`)刪除 ALTER Table `table_name` drop index index_name
Mysql 中能使用索引的情況
匹配全值
匹配值范圍查詢
匹配最左前綴
僅僅對索引進行查詢(覆蓋查詢)匹配列前綴 (添加前綴索引)部分精確 + 部分范圍
不能使用索引的場景
以 % 開關的 like 查詢
數據類型出現隱式轉換
復合索引查詢條件不包含最左部分
使用索引仍比全表掃描慢
用 or 分割開的條件
mysql 語句優化定期優化表
optimize table table_name 合并表空間碎片,對 MyISAM、BDB、INNODB 有效
如果提示不支持,可以用 mysql --skip-new 或者 mysql --safe-mode 來重啟,以便讓其他引擎支持
常用優化
盡量避免全表掃描,對 where 及 orderby 的列建立索引
盡量避免 where 使用 != 或 盡量避免 where 子句用 or 連接條件
亂用 % 導致全表掃描
盡量避免 where 子句對字段進行表達式操作
盡量避免 where 子句對字段進行函數操作
覆蓋查詢,返回需要的字段
優化嵌套查詢,關聯查詢優于子查詢
組合索引或復合索引,最左索引原則
用 exist 代替 in 當索引列有大量重復數據時,SQL 查詢可能不會去利用索引
優化數據庫對象優化表數據類型
PROCEDURE ANALYSE (16,256) 排除多于 16 個,大于 256 字節的 ENUM 建議 your sql PROCEDURE ANALYSE ()
表拆分
垂直拆分
針對某些列常用、不常用
表中的數據有獨立性,能簡單分類
需要在表存放多種介質
反范式
增加冗余列、增加派生列、重新組表和分割表
使用中間表
數據查詢量大
數據統計、分析場景
Mysql 引擎比較 mysql 有什么引擎?
關于表引擎的命令
show engines; 查看 myql 所支持的存儲引擎
show variables like %storage_engine 查看 mysql 默認的存儲引擎
show create table table_name 查看具體表使用的存儲引擎
關于 innodb
1. 提供事務、回滾、系統奔潰修復能力、多版本并發控制事務 2. 支持自增列 3. 支持外鍵 4. 支持事務以及事務相關聯功能 5. 支持 mvcc 的行級鎖
關于 MyISAM
1. 不支持事務、不支持行級鎖,只支持并發插入的表鎖,主要用于高負載的 select2. 支持三種不同的存儲結構:靜態、動態、壓縮
調整參數優化 mysql 后臺服務 MyISAM 內存優化
# 修改相應服務器位置的配置文件 my.cnf
key_buffer_size
決定 myisam 索引塊緩存區的大小,直接影響表的存取效率,建議 1 / 4 可用內存
read_buffer 讀緩存
write_buffer 寫緩存
InnoDB 內存優化
innodb_buffer_pool_size 存儲引擎表數據和索引數據的最大緩存區大小
innodb_old_blocks_pct LRU 算法 決定 old sublist 的比例
innodb_old_blocks_time LRU 算法 數據轉移間隔時間
mysql 并發參數
max_connections 最大連接數,默認 151back_log 短時間內處理大量連接,可適當增大
table_open_cache 控制所有 SQL 執行線程可打開表緩存的數量,受其他參數制約
thread_cache_size 控制緩存客戶服務線程數量,加快數據庫連接速度,根據 threads_created/connections 來衡量是否合適
innodb_lock_wait_timeout 控制事務等待行鎖時間,默認 50ms
Mysql 應用優化介紹為什么要做應用優化
數據的重要性
mysql 服務及自身性能瓶頸
保證大型系統穩定可靠運行
應用優化方法
使用連接池
減少對 mysql 的真實連接
a. 避免相同數據重復執行(查詢緩存)
b. 使用 mysql 緩存(sql 緩存)
負載均衡
a. LVS 分布式
b. 讀寫分離(主主復制、主從復制保證數據一致性)
以上是“MySQL 中優化的方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!