您好,登錄后才能下訂單哦!
這篇文章主要介紹MySQL中優化的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
sql優化分析
索引優化
優化表的數據類型
表拆分(水平、垂直)
反范式
使用中間表
mysql內存管理優化
log機制及優化
調整mysql并發參數
數據庫連接池
使用緩存減少壓力
負載均衡建立集群
主主同步、主從復制
show status 例如:分析讀為主,還是寫為主
慢查詢日志定位-log-slow-queries = xxx(指定文件名)SHOW PROCESSLIST查看當前正在進行的線程,包括線程狀態、是否鎖表
explain "your sql"desc "your sql"- 部分參數分析 select_type: SIMPLE 簡單表,不使用表連接或子查詢PRIMARY 主查詢,即外層的查詢UNION SUBQUER 子查詢的第一個select type: ALL 全表掃描 index 索引全掃描 range 索引范圍掃描 ref 使用非唯一索引或唯一索引的前綴掃描 eq_ref 類似ref,使用的索引是唯一索引const/system 單表中最多有一個匹配行NULL 不用訪問表或者索引,直接得到結果
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
匹配全值 匹配值范圍查詢 匹配最左前綴 僅僅對索引進行查詢(覆蓋查詢) 匹配列前綴 (添加前綴索引) 部分精確+部分范圍
以%開關的like查詢 數據類型出現隱式轉換 復合索引查詢條件不包含最左部分 使用索引仍比全表掃描慢 用or分割開的條件
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 ()
垂直拆分 針對某些列常用、不常用 水平拆分 表很大 表中的數據有獨立性,能簡單分類 需要在表存放多種介質
增加冗余列、增加派生列、重新組表和分割表
數據查詢量大 數據統計、分析場景
show engines; 查看myql所支持的存儲引擎 show variables like '%storage_engine'; 查看mysql默認的存儲引擎 show create table table_name 查看具體表使用的存儲引擎
1. 提供事務、回滾、系統奔潰修復能力、多版本并發控制事務2. 支持自增列3. 支持外鍵4. 支持事務以及事務相關聯功能5. 支持mvcc的行級鎖
1. 不支持事務、不支持行級鎖,只支持并發插入的表鎖,主要用于高負載的select2. 支持三種不同的存儲結構:靜態、動態、壓縮
#修改相應服務器位置的配置文件 my.cnf key_buffer_size 決定myisam索引塊緩存區的大小,直接影響表的存取效率,建議1/4可用內存 read_buffer 讀緩存 write_buffer 寫緩存
innodb_buffer_pool_size 存儲引擎表數據和索引數據的最大緩存區大小 innodb_old_blocks_pct LRU算法 決定old sublist的比例 innodb_old_blocks_time LRU算法 數據轉移間隔時間
max_connections 最大連接數,默認151back_log 短時間內處理大量連接,可適當增大 table_open_cache 控制所有SQL執行線程可打開表緩存的數量,受其他參數制約 thread_cache_size 控制緩存客戶服務線程數量,加快數據庫連接速度,根據threads_created/connections來衡量是否合適 innodb_lock_wait_timeout 控制事務等待行鎖時間,默認50ms
數據的重要性
mysql服務及自身性能瓶頸
保證大型系統穩定可靠運行
使用連接池
減少對mysql的真實連接
a. 避免相同數據重復執行(查詢緩存)
b. 使用mysql緩存(sql緩存)
負載均衡
a. LVS 分布式
b. 讀寫分離(主主復制、主從復制保證數據一致性)
以上是“MySQL中優化的方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。