最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL SQL語句分析與查詢優(yōu)化詳解

 更新時間:2018年03月06日 22:53:41   作者:demon_gdy  
這篇文章主要介紹了MySQL SQL語句分析查詢優(yōu)化,需要的朋友可以參考下

如何獲取有性能問題的SQL

1、通過用戶反饋獲取存在性能問題的SQL
2、通過慢查詢?nèi)罩精@取性能問題的SQL
3、實時獲取存在性能問題的SQL

使用慢查詢?nèi)罩精@取有性能問題的SQL

首先介紹下慢查詢相關(guān)的參數(shù)

1、slow_query_log 啟動定制記錄慢查詢?nèi)罩?br /> 設(shè)置的方法,可以通過MySQL命令行設(shè)置set global slow_query_log=on
或者修改/etc/my.cnf文件,添加slow_query_log=on

2、slow_query_log_file 指定慢查詢?nèi)罩镜拇鎯β窂郊拔募?br /> 建議日志存儲和數(shù)據(jù)存儲分開存儲

3、long_query_time 指定記錄慢查詢?nèi)罩維QL執(zhí)行時間的閾值
① 記錄所有符合條件的SQL
② 數(shù)據(jù)修改語句
③ 包括查詢語句
④ 已經(jīng)回滾的SQL

注意:
時間可以精確到微秒,存儲的單位是秒,默認值為10秒,例如我們想查詢1微秒的值,這里就要設(shè)置成0.001秒

4、log_queries_not_using_indexes 是否記錄未使用索引的SQL

5、log_output 設(shè)置慢日志查詢的保存格式(如果需要保存為文件請修改成FILE)

慢查詢使用日志中記錄的信息

1、第一行記錄的信息為使用sbtest做的測試
2、第二行記錄的信息為慢查詢?nèi)罩镜臅r間
3、第三行記錄的信息為所使用鎖的時間
4、第四行記錄的信息為返回的數(shù)據(jù)行數(shù)
5、第五行記錄的信息為掃描數(shù)據(jù)的行數(shù)
6、第六行記錄的信息為時間戳
7、第七行記錄的信息為查詢的SQL語句

使用慢查詢獲取有性能問題的SQL

常使用的慢查詢?nèi)罩痉治龉ぞ?mysqldumpslow)
介紹:匯總除查詢條件外其他完全相同的SQL,并將分析結(jié)果按照參數(shù)中所指定的順序輸出


慢查詢?nèi)罩緦嵗?/strong>

慢查詢的相關(guān)配置設(shè)置

命令行執(zhí)行參數(shù)查看分析的結(jié)果

]# cd /var/lib/mysql/log
]# mysqldumpslow -s r -t 10 slow-mysql

常使用的慢查詢?nèi)罩痉治龉ぞ?pt-query-digest)

使用工具前,需要先安裝該工具,如果已有,可略過下面的安裝步驟
1、perl模塊
]# yum install -y perl-CPAN perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-mysql perl-Digest-MD5
2、切換至src目錄下載rpm包
]# cd /usr/local/src
]# wget https://www.percona.com/downloads/percona-toolkit/3.0.7/binary/redhat/7/x86_64/percona-toolkit-3.0.7-1.el7.x86_64.rpm

3、安裝工具包
]# rpm -ivh percona-toolkit-3.0.7-1.el7.x86_64.rpm

執(zhí)行命令分析慢查詢?nèi)罩?/strong>

]# pt-query-digest --user=root --password=redhat --host=127.0.0.1 slow-mysql > slow.rep
分析的結(jié)果如下

MySQL服務(wù)器處理查詢請求的整個過程

1、客戶端發(fā)送SQL請求給服務(wù)器
2、服務(wù)器檢查是否存在在緩存服務(wù)器中命中該SQL
3、服務(wù)器端進行SQL解析,預(yù)處理,再由優(yōu)化器對應(yīng)執(zhí)行計劃
4、根據(jù)執(zhí)行計劃,調(diào)用存儲引擎API來查詢數(shù)據(jù)
5、將結(jié)果返回給客戶端

查詢緩存對SQL性能的影響

1、優(yōu)先檢查整個查詢是否命中查詢緩存中的數(shù)據(jù)
2、通過一個對大小寫敏感的哈希查找實現(xiàn)的

查詢緩存的優(yōu)化參數(shù)

query_cache_type 設(shè)置查詢緩存是否可用
ON,OFF,DEMAND

注意:DEMAND表示只有在查詢語句中使用SQL——CACHE和SQL_NO_CACHE來控制是否需要緩存

query_cache_size 設(shè)置查詢緩存的內(nèi)存大小

query_cache_limit 設(shè)置查詢緩存可用存儲的最大值

query_cache_wlock_invalidate 設(shè)置數(shù)據(jù)表被鎖后是否返回緩存中的數(shù)據(jù)(默認是關(guān)閉的,建議也是關(guān)閉的此選項)

query_cache_min_res_unit 設(shè)置查詢緩存分配的內(nèi)存塊最小的值

會造成MySQL生成錯誤的執(zhí)行計劃的原因

1、統(tǒng)計信息不準(zhǔn)確
2、執(zhí)行計劃中的成本估算不等同于實際的執(zhí)行計劃的成本
3、MySQL優(yōu)化器所認為的最優(yōu)可能與你所認為的最優(yōu)不一樣
4、MySQL從不考慮其他并發(fā)的查詢,這可能會影響當(dāng)前查詢數(shù)據(jù)
5、MySQL有時候也會基于一些固定的規(guī)則來生成執(zhí)行計劃
6、MySQL不會考慮不受其控制的成本

MySQL優(yōu)化器可優(yōu)化的SQL類型

1、重新定義表的關(guān)聯(lián)順序
優(yōu)化器會根據(jù)統(tǒng)計信息來決定表的關(guān)聯(lián)順序

2、將外鏈接轉(zhuǎn)換成內(nèi)連接
where條件和庫表結(jié)構(gòu)等

3、使用等價變換規(guī)則
(5=5 and a > 5)將會被改寫成 a > 5

4、優(yōu)化count(), min()和max()
select tables optimized away
優(yōu)化器已經(jīng)從執(zhí)行計劃中移除了該表,并以一個常數(shù)取而代之

5、將一個表達式轉(zhuǎn)換為常數(shù)表達式

6、使用等價變換規(guī)則

7、子查詢優(yōu)化

8、對in()條件進行優(yōu)化

如何確定查詢處理各個階段所消耗的時間

使用profile

set profiling = 1;
執(zhí)行查詢:
show profiles;

show profile for query N;

查詢的每個階段所消耗的時間

使用profile查看語句所消耗的時間

特定的SQL查詢優(yōu)化

1、利用主從切換的原理進行大表的表結(jié)構(gòu)修改,例如,現(xiàn)在從服務(wù)器上修改,修改完畢以后,進行主從切換,再在原來老的主上進行大表的修改,存在一定的風(fēng)險。
2、在主服務(wù)器上創(chuàng)建于一個新的表,表結(jié)構(gòu)就是將要修改大表后表結(jié)構(gòu),再把老表的數(shù)據(jù)重新導(dǎo)入到新表中,并在老表中建立一系列的觸發(fā)器,把老表的數(shù)據(jù)同步更新到新表中,當(dāng)老表中的數(shù)據(jù)全部同步到新表以后,再對老表加排它鎖,把新表改成老表的名稱,刪除重命名的老表,如下圖所示


使用pt-online-schema-change命令來修改大表,具體操作如下圖所示

上圖的參數(shù)解釋

--alter 所使用的sql語句
--user 數(shù)據(jù)庫的登錄用戶
--password 登錄用戶的密碼
D 指定所有修改表的數(shù)據(jù)庫名稱
t 表的名稱
--charset 指定數(shù)據(jù)庫的字符串
--excute 執(zhí)行

原創(chuàng)作品,轉(zhuǎn)載請注明出處

相關(guān)文章

  • mysql5.7同時使用group by和order by報錯問題

    mysql5.7同時使用group by和order by報錯問題

    這篇文章主要介紹了mysql5.7同時使用group by和order by報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情

    mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情

    這篇文章主要介紹了mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情,刪除數(shù)據(jù)表的時候,表的定義和表中所有的數(shù)據(jù)均會被刪除。因此,在進行刪除操作前,最好對表中的數(shù)據(jù)做一個備份,以免造成無法挽回的后果
    2022-07-07
  • mysql的group?by使用及多字段分組

    mysql的group?by使用及多字段分組

    Group?By是一種SQL查詢語句,常用于根據(jù)一個或多個列對查詢結(jié)果進行分組,本文主要介紹了mysql的group?by使用及多字段分組,感興趣的可以了解一下
    2023-09-09
  • 通過實例判斷mysql update是否會鎖表

    通過實例判斷mysql update是否會鎖表

    這篇文章主要介紹了通過實例判斷mysql update是否會鎖表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • linux忘記mysql密碼處理方法

    linux忘記mysql密碼處理方法

    這篇文章主要為大家介紹下linux忘記mysql密碼處理方法,需要的朋友可以參考下。
    2011-08-08
  • 全面了解MySql中的事務(wù)

    全面了解MySql中的事務(wù)

    下面小編就為大家?guī)硪黄媪私釳ySql中的事務(wù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 詳解MySQL索引原理以及優(yōu)化

    詳解MySQL索引原理以及優(yōu)化

    在本篇文章中小編給大家整理了關(guān)于MySQL索引原理以及優(yōu)化的相關(guān)知識點以及實例代碼,需要的朋友們參考下。
    2019-06-06
  • 安裝MySQL常見的三種方式

    安裝MySQL常見的三種方式

    MySQL是一個開放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。接下來通過本篇文章給大家分享安裝MySQL常見的三種方式,需要的朋友可以參考下
    2015-09-09
  • MySQL打印死鎖日志的方法步驟

    MySQL打印死鎖日志的方法步驟

    本文主要介紹了MySQL打印死鎖日志的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Windows server 2008 r2下MySQL5.7.17 winx64安裝版配置方法圖文教程

    Windows server 2008 r2下MySQL5.7.17 winx64安裝版配置方法圖文教程

    這篇文章主要為大家詳細介紹了Windows server 2008 r2下MySQL5.7.17 winx64安裝版配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

共和县| 兰坪| 西林县| 道孚县| 广河县| 桐庐县| 乐都县| 南郑县| 大连市| 阿拉尔市| 沂源县| 庆城县| 集贤县| 东明县| 克东县| 南通市| 邵武市| 会东县| 高雄县| 宜君县| 广汉市| 七台河市| 丘北县| 沈阳市| 乐山市| 滦南县| 江阴市| 名山县| 澄城县| 蒙城县| 满洲里市| 喀喇| 海林市| 砚山县| 平遥县| 祁阳县| 安图县| 如皋市| 衢州市| 兴文县| 海安县|