MySQL內幕揭秘:探索MySQL調優指南,解鎖MySQL的強大功能
1、MySQL大事記
圖片
1994年:Michael Widenius和David Axmark創建了MySQL AB。1995年:MySQL從最初的beta版本發布,成為一款開源軟件。1997年:MySQL發行版本3.21,并成為了第一個支持多個存儲引擎的數據庫管理系統。2000年:MySQL AB成立了美國分部,開始在美國市場推廣MySQL。2003年:MySQL AB發行了版本4.0,包括一些新功能,如子查詢、視圖和存儲過程等。2005年:Sun Microsystems收購了MySQL AB,MySQL開始進入商業化階段。2008年:MySQL 5.1發布,引入了一些新的特性,如事件調度器和復制增量流等。2010年:Oracle收購Sun Microsystems,也就接管了MySQL。2012年:MySQL 5.6發布,帶來了全文搜索、NoSQL接口和多線程復制等新特性。2013年:MySQL 5.7發布,加入了JSON數據類型、有效地調整排序緩存和更好的性能優化等。2018年:MySQL 8.0發布,提供窗口函數、變量范圍和原生支持多種數據類型等新特性。
2、MySQL使用在哪些大平臺或企業
1)谷歌:谷歌廣泛使用MySQL作為其后端數據庫,支持數百萬個查詢請求。
2)Facebook:Facebook在早期就采用了MySQL,并開發了InnoDB存儲引擎,使MySQL能夠處理更高級別的負載。
3)Twitter:Twitter在其基礎架構中使用MySQL,以存儲和處理海量的社交數據。
4)美團:美團是一個中國本土的O2O平臺,使用MySQL來管理其訂單、餐廳、優惠券等數據。
5)阿里巴巴:阿里巴巴也是MySQL的重要用戶之一,它將MySQL用于淘寶、支付寶和阿里云等核心業務。
6)百度:百度廣泛使用MySQL來管理其各種應用程序和服務,如搜索、地圖、音樂等。
3、MySql調優
3.1、MySQL調優維度
圖片
1)SQL及索引優化:SQL查詢語句的優化是提高MySQL性能的關鍵。優化查詢語句可以采用各種方法,如使用合適的索引、避免在WHERE子句中使用函數操作符、減少子查詢等。
2)表結構優化:表的設計和結構也會影響MySQL的性能。適當的表設計可以提高查詢性能和數據處理速度。例如,使用分區表可以加速查詢,而垂直拆分表可以降低數據庫的負載。
3)系統配置優化:MySQL及服務器的參數設置對于性能也非常重要。調整配置可以讓MySQL更好地利用硬件資源。例如,增加緩存區大小、調整連接超時時間或者優化排序緩存等都可以提高系統性能。
4)硬件優化:除了軟件方面的優化,還可以通過硬件來優化MySQL性能。例如,使用更快的磁盤、增加內存以及升級CPU等都可以提高MySQL的負載能力。
3.2、MySQL調優分解
圖片
4、具體說明
4.1、SQL語句優化
- 開啟慢查詢功能
vim/etc/my.cnf
[mysqld]
slow-query-log=on# 開啟慢查詢功能
slow_query_log_file=/data/slow-query.log# 慢查詢日志存放路徑與名稱
long_query_time=5# 查詢時間超過5s的查詢語句
log-queries-not-using-indexes=on# 列出沒有使用索引的查詢語句
1)查看所有日志狀態: show variables like '%quer%';
2)查看慢查詢狀態:show variables like 'show%'
- 分析SQL語句
MySql內部函數explain(查詢sql的執行計劃),explain返回各列的含義
table:顯示這一行的數據是關于哪張表的
type:這是重要的列,顯示連接使用了何種類型。
從最好到最差的連接類型為const、eq_reg、ref、range、index 和ALL
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。
key:實際使用的索引。如果為NULL,則沒有使用索引。
keyjen:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數
rows: MySQL估算需要讀取的行數
rows: MySQL估算需要讀取的行數
- 子查詢優化
子查詢盡量不用或改成join
- group by 優化
group by 盡量使用索引字段
- limit 優化
給查詢語句增加limit
4.2、索引優化
- 重復索引
- 冗余索引
- 檢查重復及冗余索引的工具
- 刪除不用的索引
4.3、數據庫結構優化
- 選擇合適的數據類型
- 表的范式化
- 表的反范式化的使用
- 表的垂直拆分(列拆分)
- 表的水行拆分(行拆分)
4.4、配置優化
- 操作系統配置
1)緩存池大小
2)打開文件限制
- MySQL配置
1)innodb緩沖池內存占用大小
2)innodb_buffer_pool_instances 緩沖池個數
3)innodb_log_buffer_size 緩沖的大小
4)innodb IO配置
4.5、服務器硬件優化
- CPU 多核
- 硬盤 raid0 raid1 raid5增加硬盤IO速度
5、數據庫調優步驟
圖片
6、MySql相關問題
1)InnoDB myisam區別
- innodb支持事務、myisam不支持事務
- innodb不支持全文索引、myisam支持全文索引,查詢性能較快
- innodb行級鎖、myisam表級鎖
2)怎么處理MySQL的慢查詢?
開啟慢查詢->explain分析SQL->橫縱向分表
3)Myisam和Innodb的區別?
圖片
4)Mysql中索引類型有哪些?
- 普通索引:允許被索引的數據列包含重復的值
- 唯一索引:可以保證數據記錄的唯一性
- 主鍵索引:是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用于唯一標識一條記錄,使用關鍵字primary key來創建
- 全文索引:通過建立倒排索引,可以極大的提升檢索效率,解決判斷字段是否包含的問題,是目前搜索引擎使用的一種關鍵技術索引可以極大地提高數據的查詢速度
5)為什么用自增主鍵
數據庫使用的是B+Tree,非自增會出現要插入到節點與節點中間,會發生節點分裂。
6)為什么用聯合索引
減少開銷。建一個聯合索引(col1,col2,col3),實際相當于建了(col1),(col1,col2),(col1,col2,col3)三個索引。