大牛带你学优化~案例进阶Mysql优化
在進(jìn)行 MySQL 的優(yōu)化之前必須要了解的就是 MySQL 的查詢過程,很多的查詢優(yōu)化工作實(shí)際上就是遵循一些原則讓 MySQL 的優(yōu)化器能夠按照預(yù)想的合理方式運(yùn)行而已。
MySQL 查詢過程
優(yōu)化的哲學(xué)
注:優(yōu)化有風(fēng)險(xiǎn),修改需謹(jǐn)慎。
- 優(yōu)化可能帶來的問題:
- 優(yōu)化不總是對一個(gè)單純的環(huán)境進(jìn)行,還很可能是一個(gè)復(fù)雜的已投產(chǎn)的系統(tǒng)。
- 優(yōu)化手段本來就有很大的風(fēng)險(xiǎn),只不過你沒能力意識到和預(yù)見到。
- 任何的技術(shù)可以解決一個(gè)問題,但必然存在帶來一個(gè)問題的風(fēng)險(xiǎn)。
- 對于優(yōu)化來說解決問題而帶來的問題,控制在可接受的范圍內(nèi)才是有成果。
- 保持現(xiàn)狀或出現(xiàn)更差的情況都是失敗。
優(yōu)化的需求:
- 穩(wěn)定性和業(yè)務(wù)可持續(xù)性,通常比性能更重要。
- 優(yōu)化不可避免涉及到變更,變更就有風(fēng)險(xiǎn)。
- 優(yōu)化使性能變好,維持和變差是等概率事件。
- 切記優(yōu)化,應(yīng)該是各部門協(xié)同,共同參與的工作,任何單一部門都不能對數(shù)據(jù)庫進(jìn)行優(yōu)化。
所以優(yōu)化工作,是由業(yè)務(wù)需求驅(qū)使的!
優(yōu)化由誰參與?在進(jìn)行數(shù)據(jù)庫優(yōu)化時(shí),應(yīng)由數(shù)據(jù)庫管理員、業(yè)務(wù)部門代表、應(yīng)用程序架構(gòu)師、應(yīng)用程序設(shè)計(jì)人員、應(yīng)用程序開發(fā)人員、硬件及系統(tǒng)管理員、存儲管理員等,業(yè)務(wù)相關(guān)人員共同參與。
優(yōu)化思路
優(yōu)化什么
在數(shù)據(jù)庫優(yōu)化上有兩個(gè)主要方面:
- 安全:數(shù)據(jù)可持續(xù)性。
- 性能:數(shù)據(jù)的高性能訪問。
優(yōu)化的范圍有哪些
存儲、主機(jī)和操作系統(tǒng)方面:
- 主機(jī)架構(gòu)穩(wěn)定性
- I/O 規(guī)劃及配置
- Swap 交換分區(qū)
- OS 內(nèi)核參數(shù)和網(wǎng)絡(luò)問題
應(yīng)用程序方面:
- 應(yīng)用程序穩(wěn)定性
- SQL 語句性能
- 串行訪問資源
- 性能欠佳會話管理
- 這個(gè)應(yīng)用適不適合用 MySQL
數(shù)據(jù)庫優(yōu)化方面:
- 內(nèi)存
- 數(shù)據(jù)庫結(jié)構(gòu)(物理&邏輯)
- 實(shí)例配置
說明:不管是設(shè)計(jì)系統(tǒng)、定位問題還是優(yōu)化,都可以按照這個(gè)順序執(zhí)行。
優(yōu)化維度
數(shù)據(jù)庫優(yōu)化維度有如下四個(gè):
- 硬件
- 系統(tǒng)配置
- 數(shù)據(jù)庫表結(jié)構(gòu)
- SQL 及索引
優(yōu)化選擇:
- 優(yōu)化成本:硬件>系統(tǒng)配置>數(shù)據(jù)庫表結(jié)構(gòu)>SQL 及索引。
- 優(yōu)化效果:硬件<系統(tǒng)配置<數(shù)據(jù)庫表結(jié)構(gòu)
在這里我為大家準(zhǔn)備一節(jié)sql的國防大學(xué)大牛精彩分享
視頻內(nèi)容如下;
1.從實(shí)戰(zhàn)中來,分析SQL常見深坑;
2.優(yōu)化全圖譜,從0開始;
3.索引的語法精解;
4.索引的雷區(qū),用了索引效率會更慢?
5.30分鐘精通執(zhí)行計(jì)劃;
一個(gè)SQL引發(fā)的思考
最簡單的索引
稍微復(fù)雜點(diǎn)的索引
索引分類
- 普通索引:即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引
- 唯一索引:索引列的值必須唯一,但允許有空值
- 復(fù)合索引:即一個(gè)索引包含多個(gè)列
- 聚簇索引(聚集索引):并不是一種單獨(dú)的索引類型,而是一種數(shù)據(jù)存儲方式。具體細(xì)節(jié)取決于不同的實(shí)現(xiàn),InnoDB的聚簇索引其實(shí)就是在同一個(gè)結(jié)構(gòu)中保存了B-Tree索引(技術(shù)上來說是B+Tree)和數(shù)據(jù)行。
- 非聚簇索引:不是聚簇索引,就是非聚簇索引
show global variables like "%datadir%";
基礎(chǔ)語法
查看索引
SHOW INDEX FROM table_name\G創(chuàng)建索引
CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length));
ALTER TABLE 表名 ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))刪除索引
DROP INDEX [indexName] ON mytable;
最后送波福利。現(xiàn)在加入Java高階架構(gòu)即可獲取Java工程化、高性能及分布式、高性能、高架構(gòu)、zookeeper、性能調(diào)優(yōu)、Spring、MyBatis、Netty源碼分析和大數(shù)據(jù)等多個(gè)知識點(diǎn)高級進(jìn)階干貨的直播免費(fèi)學(xué)習(xí)權(quán)限及相關(guān)視頻資料
轉(zhuǎn)載于:https://juejin.im/post/5cc705405188255f1d7e976f
總結(jié)
以上是生活随笔為你收集整理的大牛带你学优化~案例进阶Mysql优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thymeleaf 学习笔记
- 下一篇: 3、java基础:抽象类与接口的区别