后臺開發(fā),不了解一丟丟數(shù)據(jù)庫怎么能行。少不了得了解一點優(yōu)化知識吧,要不別人嫌你的慢的要死怎么辦。至少得找到能夠下手的點。
遇到問題應(yīng)該如何去思考。
優(yōu)化思路,從這些點切入。
1.數(shù)據(jù)庫設(shè)計
2.sql語句優(yōu)化
3.數(shù)據(jù)庫參數(shù)配置
4.恰當(dāng)?shù)挠布Y源和操作系統(tǒng)
那么就分開從上面這些點簡單說一哈。
數(shù)據(jù)庫設(shè)計
怎么設(shè)計?遵循三范式。
什么是三范式?
1.字段不可分。
2.有主鍵,非主鍵字段依賴主鍵。
3.非主鍵字段不能互相依賴。
三范式言簡意賅,沒啥說的。
還有,選用合適的數(shù)據(jù)類型。這個沒必要說了。經(jīng)驗積累。
選擇合適的引擎:
MyISAM:默認(rèn)的Mysql存儲引擎。插入讀寫多,更新刪除少,并對事務(wù)的完整性要求的不是很高。訪問快。
InnoDB:提交了具有提交、回滾、崩潰恢復(fù)能力的事務(wù)安全。寫的效率差一些、而且占用更多磁盤空間。
sql語句優(yōu)化
這個就是重點了。這部分也是常常做為后端開發(fā)需要優(yōu)化的一個點。這就是所謂的優(yōu)化慢SQL部分。
首先,慢SQL,什么是慢呢,查多久算慢,1s還是10s。
機(jī)器肯定不知道,你得告訴它。
show variables like 'long_query_time';
set long_query_time=2;?
show那個參數(shù)看定義慢查詢的時間是多少,默認(rèn)10s,好,改,兩秒你就是慢。
以后超過兩秒后就是慢SQL了。去哪找?它默認(rèn)不給你記錄。得自己開。
bin\mysqld.exe - -safe-mode? - -slow-query-log(開啟)
開!版本不一樣,開的方式也不一樣,簡單查一下就出來了。
這樣的話,要是超過2s的話,這些SQL都給你記下來了。
默認(rèn)目錄是data中的host-name-slow.log。?忘記了話,根據(jù)命令查一下。
?slow_query_log //是否打開日志記錄
slow_query_log_file //日志存放位置
SQL記下來了,那怎么辦呢。當(dāng)然是分析它!
如何分析?使用explain命令分析它,分析出許多字段什么意思。
? select_type:表示查詢的類型。
??table:輸出結(jié)果集的表
? type:表示表的連接類型
? possible_keys:表示查詢時,可能使用的索引
??type:掃描類型
? key:表示實際使用的索引
? key_len:索引字段的長度
? rows:掃描出的行數(shù)(估算的行數(shù))
? Extra:執(zhí)行情況的描述和說明
從這個分析結(jié)果就能看出來,比如:原來我的SQL沒用到索引?。?!
查看索引使用情況:
show status LIKE 'Handler_read%'?? ?
Handler_read_key越高表示使用索引查詢到的次數(shù)
Handler_read_rnd越高說明效率越低
分析完如何解決優(yōu)化呢?留個入口,單獨寫索引(這里)。
數(shù)據(jù)庫參數(shù)配置
1.內(nèi)存,一般用InnoDB,所以兩個調(diào)大一些
innodb_additional_mem_pool_size = 64M
innodb_buffer_pool_size =1G
2.修改存儲引擎和最大連接數(shù)
恰當(dāng)?shù)挠布Y源和操作系統(tǒng)
這。。我也不知道選啥。
沒寫多少,大概思路是這樣。