mysql數(shù)據(jù)優(yōu)化思路

后臺開發(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)

這。。我也不知道選啥。

沒寫多少,大概思路是這樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容