我們說到性能調(diào)優(yōu),大部分時(shí)候想要實(shí)現(xiàn)的目標(biāo)是讓我們的查詢更快裂七。一個(gè)查詢的動(dòng)作又是由很多個(gè)環(huán)節(jié)組成的褥符,每個(gè)環(huán)節(jié)都會(huì)消耗時(shí)間,我在mysql專題講 SQL 語句的執(zhí)行流程的時(shí)候已經(jīng)分析過了韭寸。我們要減少查詢所消耗的時(shí)間春哨,就要從每一個(gè)環(huán)節(jié)入手!
所以我們優(yōu)化的思路:這個(gè)思路從下到上與執(zhí)行流程相對應(yīng)恩伺,但是我們實(shí)際在優(yōu)化的時(shí)候的優(yōu)先級一定是從上到下赴背!(解析器,詞法和語法分析晶渠,主要保證語句的正確性凰荚,語句不出錯(cuò)就沒問題。由 Sever自己處理褒脯,跳過優(yōu)化器——SQL 語句分析與優(yōu)化)
1.連接——MySQL配置優(yōu)化
這個(gè)優(yōu)化主要是解決連接數(shù)不夠的問題便瑟,我們主要從服務(wù)端和客戶端倆個(gè)方面來解決!
服務(wù)端:我們可以增加服務(wù)端的可用連接數(shù)番川。
客戶端:引入鏈接池
2.緩存——數(shù)據(jù)庫架構(gòu)優(yōu)化
1)引入第三放緩存:redis
2)主從復(fù)制
3)分庫分表
3.優(yōu)化器——SQL 語句分析與優(yōu)化
1)慢查詢?nèi)罩?slow query log
2)SHOW PROFILE
3)EXPLAIN 執(zhí)行計(jì)劃
4)SQL與索引優(yōu)化
4.存儲(chǔ)引擎優(yōu)化
1)存儲(chǔ)引擎的選擇:為不同的業(yè)務(wù)表選擇不同的存儲(chǔ)引擎到涂,例如:查詢插入操作多的業(yè)務(wù)表,用 MyISAM颁督。臨時(shí)數(shù)據(jù)用 Memeroy践啄。常規(guī)的并發(fā)大更新多的表用 InnoDB。
2)分表:舉例-->交易歷史表:在年底為下一年度建立 12 個(gè)分區(qū)沉御,每個(gè)月一個(gè)分區(qū)屿讽。渠道交易表:分成當(dāng)日表;當(dāng)月表;歷史表,歷史表再做分區(qū)吠裆。
3)字段定義:1.整數(shù)類型 2.字符類型 3.非空 4.不要用外鍵伐谈、觸發(fā)器、視圖 5.大文件存儲(chǔ) 6.表拆分