MySql數(shù)據(jù)庫(kù)保姆級(jí)優(yōu)化方案

      網(wǎng)友投稿 641 2022-05-25

      序號(hào)

      時(shí)間

      版本

      1

      2021/11/25

      1.0

      劉志虎

      優(yōu)化角度數(shù)據(jù)庫(kù)設(shè)計(jì)操作語(yǔ)句基礎(chǔ)設(shè)施數(shù)據(jù)庫(kù)架構(gòu)

      一、數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化

      根據(jù)業(yè)務(wù)需求選擇正確的存儲(chǔ)引擎,如果對(duì)事務(wù)性要求高就用InnoDB(默認(rèn)),讀多寫少盡量使用MyISAM。

      設(shè)置合理的字段類型及字段長(zhǎng)度,比如說(shuō)你這個(gè)字段就20多個(gè)字段你設(shè)置成VARCHAR(255)就是對(duì)磁盤空間的浪費(fèi)。

      默認(rèn)值盡可能的使用 NOT NULL,可以通過(guò)設(shè)置默認(rèn)值避免NULL值。

      盡量少的使用VARCHAR,TEXT,BLOB這三個(gè)字段。

      添加適當(dāng)索引(index) [普通索引、主鍵索引、唯一索引unique、全文索引]。

      不要濫用索引,大表索引,小表不索引。

      表的設(shè)計(jì)合理化(符合3NF)。

      二、SQL語(yǔ)句優(yōu)化

      優(yōu)化利器 -- EXPLAIN

      EXPLAIN SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'iacl_cmp' UNION SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'iacl_cmp' UNION SELECT COUNT(*) FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = 'iacl_cmp';

      運(yùn)行結(jié)果

      主要關(guān)注4個(gè)指標(biāo):

      type:優(yōu)化目標(biāo)至少達(dá)到range級(jí)別,要求是ref級(jí)別,如果可以const最好。

      type 性能從高到低

      system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

      key:是查詢使用到的索引,如果此列為空,要么未建立索引,要么索引失效。

      rows:是這條SQL語(yǔ)句掃描的行數(shù),越少越好。

      extra:此列為擴(kuò)展列,如果出現(xiàn)臨時(shí)表、文件排序則需要優(yōu)化。

      where、= 條件避免類型轉(zhuǎn)換入?yún)㈩愋驮趥魅肭稗D(zhuǎn)換成跟字段類型一致內(nèi)關(guān)聯(lián)避免也要避免類型不一致做過(guò)濾

      避免使用 select *

      like引起索引失效,盡量滿足最左匹配原則,建議這樣寫:where display_name like '開(kāi)始%';

      不要在where條件中帶有函數(shù)計(jì)算、類型轉(zhuǎn)換

      關(guān)于in和exist,如果查詢的倆個(gè)表大小一致則性能差別可忽略,如果子查詢表大用exist,否則使用in

      預(yù)知查詢一條數(shù)據(jù)要加上limit 1,以便查到數(shù)據(jù)終止掃描

      MySql數(shù)據(jù)庫(kù)保姆級(jí)優(yōu)化方案

      關(guān)聯(lián)查詢盡量不要超過(guò) 3 個(gè)表關(guān)聯(lián)

      數(shù)據(jù)字段更新頻繁、重復(fù)度高不適合建索引

      explain中的type至少要達(dá)到range,建議為ref

      盡量用join代替子查詢

      盡量用union all代替union

      數(shù)據(jù)優(yōu)化常用命令

      查看Mysql服務(wù)器的鏈接

      show?full?processlist;

      查詢慢查詢次數(shù)

      show status like 'slow_queries';

      查看慢查詢?cè)O(shè)置的時(shí)間 ,默認(rèn)10s

      show variables like 'long_query_time';

      設(shè)置慢查詢時(shí)間、set long_query_time = 1;

      查看建表語(yǔ)句

      show create table wf_node;

      查看表的字段

      desc wf_node;

      查看表索引

      show indexes from wf_node;

      創(chuàng)建索引主鍵索引

      alter?table?wf_node?add?primary?key(id);

      唯一索引

      alter?table?wf_node?add?UNIQUE?(gmt_create);

      普通索引

      alter?table?wf_node?add?index?idx_display_name?(display_name);

      復(fù)合索引

      ALTER?TABLE?wf_node?ADD?INDEX?idx_display_name_gmt_create?(display_name, gmt_create);

      刪除索引

      drop?index?idx_display_name?on?wf_node;

      重建索引

      OPTIMIZE?TABLE?wf_node;

      三、基礎(chǔ)設(shè)施優(yōu)化

      硬件優(yōu)化

      CPU:配置多核心和頻率高的cpu,多核心可以執(zhí)行多個(gè)線程

      內(nèi)存:配置大內(nèi)存,提高內(nèi)存,即可提高緩存區(qū)容量,因此能減少磁盤I/O時(shí)間,從而提高響應(yīng)速度.

      磁盤:配置高速磁盤或合理分布磁盤:高速磁盤提高I/O,分布磁盤能提高并行操作的能力.

      數(shù)據(jù)庫(kù)本身參數(shù)配置

      key_buffer_size:索引緩沖區(qū)大小

      table_open_cache:指定表高速緩存的大小

      query_cache_size和query_cache_type:前者是查詢緩沖區(qū)大小,后者是前面參數(shù)的開(kāi)關(guān),0表示不使用緩沖區(qū),1表示使用緩沖區(qū),但可以在查詢中使用SQL_NO_CACHE表示不要使用緩沖區(qū),2表示在查詢中明確指出使用緩沖區(qū)才用緩沖區(qū),即SQL_CACHE

      sort_buffer_size:排序緩沖區(qū)

      四、數(shù)據(jù)庫(kù)架構(gòu)優(yōu)化

      增加緩存

      給數(shù)據(jù)庫(kù)增加緩存系統(tǒng),把熱數(shù)據(jù)緩存到內(nèi)存中,如果緩存中有請(qǐng)求的數(shù)據(jù)就不再去請(qǐng)求MySQL,減少數(shù)據(jù)庫(kù)負(fù)載。

      主從復(fù)制與讀寫分離

      在生產(chǎn)環(huán)境中,業(yè)務(wù)系統(tǒng)通常讀多寫少,可部署一主多從架構(gòu),主數(shù)據(jù)庫(kù)負(fù)責(zé)寫操作,并做雙機(jī)熱備,多臺(tái)從數(shù)據(jù)庫(kù)做負(fù)載均衡,負(fù)責(zé)讀操作

      分表

      分表分為垂直拆分和水平拆分:垂直拆分:把原來(lái)的一個(gè)很多字段的表拆分多個(gè)表,解決表的寬度問(wèn)題。你可以把不常用的字段單獨(dú)放到一個(gè)表中,也可以把大字段獨(dú)立放一個(gè)表中,或者把關(guān)聯(lián)密切的字段放一個(gè)表中。

      水平拆分:把原來(lái)一個(gè)表拆分成多個(gè)表,每個(gè)表的結(jié)構(gòu)都一樣,解決單表數(shù)據(jù)量大的問(wèn)題。

      分區(qū)

      分區(qū)就是把一張表的數(shù)據(jù)根據(jù)表結(jié)構(gòu)中的字段(如range、list、hash等)分成多個(gè)區(qū)塊,這些區(qū)塊可以在一個(gè)磁盤上,也可以在不同的磁盤上,分區(qū)后,表面上還是一張表,但數(shù)據(jù)散列在多個(gè)位置,這樣一來(lái),多塊硬盤同時(shí)處理不同的請(qǐng)求,從而提高磁盤I/O讀寫性能。

      五、PDF文檔下載

      有條友的同行在留言或者在私信中說(shuō)要pdf文檔,但頭條沒(méi)有發(fā)現(xiàn)哪里可以發(fā)附件,就發(fā)到百度網(wǎng)盤了,下面是聯(lián)系地址,有需要的下載就行了,大家記得關(guān)注我哦

      鏈接:

      https://pan.baidu.com/s/1gY9D2yX0Vyojnh2qOcNgWA

      提取碼:a8jb

      MySQL 數(shù)據(jù)庫(kù)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:MySql數(shù)據(jù)庫(kù)讀寫分離部署及配置詳細(xì)手冊(cè)
      下一篇:開(kāi)源社區(qū)ipynb如何運(yùn)行到ModelArts notebook上
      相關(guān)文章
      亚洲综合无码一区二区痴汉 | 亚洲中文字幕在线观看| 亚洲av永久无码天堂网| 亚洲精品456人成在线| 亚洲成人免费电影| 亚洲美免无码中文字幕在线| 亚洲尹人九九大色香蕉网站| 亚洲国产一区在线| 亚洲天堂中文字幕| 亚洲午夜免费视频| 亚洲欧洲日本天天堂在线观看| 久久精品国产亚洲av麻豆小说| 亚洲伊人tv综合网色| 亚洲欧洲自拍拍偷综合| 亚洲在成人网在线看| 亚洲av永久无码嘿嘿嘿| 亚洲欧洲日韩国产一区二区三区| 亚洲最大无码中文字幕| 久久亚洲欧美国产精品| 亚洲AⅤ无码一区二区三区在线| 含羞草国产亚洲精品岁国产精品| 亚洲AV日韩AV一区二区三曲| 婷婷亚洲天堂影院| 亚洲综合另类小说色区色噜噜| 久久久精品国产亚洲成人满18免费网站 | 国产人成亚洲第一网站在线播放| 亚洲国产综合精品中文第一| 亚洲精品人成网线在线播放va| 亚洲AV无码一区二区大桥未久| 国产综合激情在线亚洲第一页| 亚洲精品99久久久久中文字幕| 亚洲日韩在线观看免费视频| 亚洲精品乱码久久久久久| 亚洲成a人片77777老司机| 亚洲国产一区二区a毛片| 亚洲国产日韩在线人成下载| 中文字幕无码亚洲欧洲日韩| 国产亚洲精品欧洲在线观看| 红杏亚洲影院一区二区三区| 亚洲国产精彩中文乱码AV| 亚洲视频一区在线播放|