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

MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨

 更新時間:2022年08月01日 15:13:28   作者:IT學(xué)習(xí)日記v  
這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

MySQL性能優(yōu)化是一個老生常談的問題,無論是在實際工作中還是面試中,都不可避免遇到相應(yīng)的場景,下面博主就總結(jié)一些能夠幫助大家解決這個問題的小技巧。

SQL優(yōu)化之前需要確認哪些SQL需要優(yōu)化,這時就需要引起SQL性能分析工具,主要優(yōu)化的是查詢語句。

SQL的執(zhí)行頻率

SQL性能優(yōu)化一般是針對查詢語句,所以在定位是否需要優(yōu)化之前,可以先確認表的更刪查改的一個執(zhí)行頻率對比,如果是查詢占主導(dǎo)地位,則可以一步排查。

MySQL支持客戶端通過show [session|global] status命令對服務(wù)器狀態(tài)進行查詢。

查看執(zhí)行頻率方式:

show global status like ‘com_______’(7個下劃線,表示后面會有7個字符)

慢查詢?nèi)罩?/h2>

確認了SQL的執(zhí)行頻率,則需要通過慢查詢?nèi)罩具M行進一步定位哪些SQL語句執(zhí)行時間占用較長。

慢查詢?nèi)罩居涗浟怂袌?zhí)行時間超過指定參數(shù)(long_query_time,單位:秒,默認是10s)的所有SQL語句的日志。

默認情況下,慢查詢?nèi)罩臼菦]有開啟的,需要在MySQL的配置文件(linux下為:/etc/my.cnf)中配置如下指令:

  • 查詢服務(wù)端是否開啟慢查詢?nèi)罩荆簊how variables like 'slow_query_log';
  • 在mysql的配置文件中添加如下配置啟動:
  • slow_query_log=1;開啟mysql慢日志查詢開關(guān)
  • long_query_time=xx;設(shè)置慢日志時間,只要SQL執(zhí)行時間查過該值,則視為慢查詢,記錄在慢日志中。
  • 配置完成后重啟mysql服務(wù)端
  • linux中mysql的慢日志文件在: /var/lib/mysql/localhost-slow.log

window可以在my.ini文件中配置具體的地址

Query_time SQL執(zhí)行的時間,越長則越慢

Lock_time 在MySQL服務(wù)器階段(不是在存儲引擎階段)等待表鎖時間

Rows_sent 查詢返回的行數(shù)

Rows_examined 查詢檢查的行數(shù)

show profiles詳情分析

通過慢查詢?nèi)罩?,我們可以定位到超過設(shè)置閾值的慢SQL,但是實際業(yè)務(wù)中,這并不能完全具有代表性,因為閾值是主觀設(shè)置的,可能有大量執(zhí)行時間低于閾值的SQL也存在問題,因此慢日志SQL并不能完全定位出所有的慢SQL。

show profiles 能夠讓我們了解到SQL執(zhí)行時時間都耗費到哪里了。 通過have_profiling參數(shù),可以查看mysql是否支持該profile操作。

格式: select @@have_profiling;

默認情況下,profiling是關(guān)閉的,可以同set指令開啟session|global級別的profiling。

格式: set global | session profiling = 1;

優(yōu)化方案:

  • show profiles; 查看每一條SQL的耗時基本情況
  • show profile for query query_id; 查詢指定query_id的SQL語句各個階段的耗時情況
  • show profile cpu for query query_id; 查詢指定query_id的SQL語句cpu使用情況

explain執(zhí)行計劃

前面介紹的幾種方式都是通過執(zhí)行時間長短來判斷SQL語句執(zhí)行的性能好壞,但是這個相對來說是比較片面的,想要更全面地評判SQL語句好壞,則需要使用explain查看SQL的執(zhí)行計劃。

Explain或者DESC命令獲取MySQL如何執(zhí)行SELECT語句的信息,包括在SELECT語句過程中表如何連接和連接的順序。

語法:explain | desc select xxxx...

1、ID參數(shù)

select中的查詢序號,表示的是查詢中執(zhí)行select子句或者是操作表的順序(id相同,執(zhí)行順序從上往下,id不同,值越大,越先執(zhí)行)

2、select_type參數(shù)

表示select查詢類型,常見的有SIMPLE(簡單表,即不使用表連接或者子查詢)、primary(主查詢,即外層查詢)、UNION(UNION中的第二個或者后面的查詢語句)、SUBQUERY(SELECT/WHERE之后包含了子查詢)

3、type參數(shù)

表示連接/訪問類型,性能由好到差的連接類型為:null、system、const、eq_ref、ref、range、index、all

在優(yōu)化的時候,盡量將type往前優(yōu)化,最差也要為index

  • null:查詢的時候不訪問任何表,如:select "1"
  • system:當(dāng)訪問一些系統(tǒng)表的時候會出現(xiàn)
  • const:根據(jù)主鍵或者唯一索引訪問時,會出現(xiàn)const
  • eq_ref:待確認
  • ref:使用非唯一性索引進行訪問時,可能出現(xiàn)ref
  • range:
  • index:使用到了索引,但是對整個索引都進行了遍歷,性能也比較差
  • all:全表掃描,性能最差

4、possible_key參數(shù):顯示在執(zhí)行查詢時,表中可能被使用到的索引,一個或者多個、

5、key參數(shù):在執(zhí)行查詢時,實際上會命中的索引

6、key_len參數(shù):表示使用到的索引的字節(jié)數(shù),該值為索引字段最大可能長度,在不損失精確性的前提下,長度越短越好。

7、rows參數(shù):MySQL認為必須要執(zhí)行查詢的行數(shù),在idb引擎表中,是一個估計值,可能并不總是準(zhǔn)確的

8、ref參數(shù):待確認?

9、filtered參數(shù):表示查詢返回的行數(shù)占總讀取行數(shù)的百分比,值越大越好

10、extra參數(shù):額外的一些執(zhí)行信息如排序

以上就是MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨的詳細內(nèi)容,更多關(guān)于MySQL查詢性能優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MYSQL中Truncate的用法詳解

    MYSQL中Truncate的用法詳解

    這篇文章主要介紹了MYSQL中Truncate的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL緩存優(yōu)化方案總結(jié)

    MySQL緩存優(yōu)化方案總結(jié)

    最近迭代的產(chǎn)品版本從2.X來到了3.X,屬于一個非常大的產(chǎn)品升級,比上個版本多了很多功能,那么上線之前肯定要在一個干凈的環(huán)境里進行測試回歸以及性能測試,本文總結(jié)一下數(shù)據(jù)庫層面的一些緩存機制對查詢速度整體的優(yōu)化,需要的朋友可以參考下
    2023-08-08
  • MySQL慢日志實踐小結(jié)

    MySQL慢日志實踐小結(jié)

    這篇文章主要介紹了MySQL慢日志實踐小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 在Centos 5.5 上編譯安裝mysql 5.5.9

    在Centos 5.5 上編譯安裝mysql 5.5.9

    由于開發(fā)需要,現(xiàn)在需要安裝安裝MySQL 5.5.9,使用了rpm安裝總是出錯,而且還有好多依事關(guān)系麻煩,此外也沒有找到二進制的包,只好找源碼包進行編譯;
    2014-07-07
  • MySQL服務(wù)啟動與關(guān)閉如何操作圖文詳解

    MySQL服務(wù)啟動與關(guān)閉如何操作圖文詳解

    這篇文章主要為大家介紹了MySQL服務(wù)啟動與關(guān)閉如何操作圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-10-10
  • mysql 的root 用戶無法授權(quán)及解決navicat 遠程授權(quán)提示1044問題

    mysql 的root 用戶無法授權(quán)及解決navicat 遠程授權(quán)提示1044問題

    這篇文章主要介紹了mysql 的root 用戶無法授權(quán),解決navicat 遠程授權(quán)提示1044問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 詳解Mysql中保證緩存與數(shù)據(jù)庫的雙寫一致性

    詳解Mysql中保證緩存與數(shù)據(jù)庫的雙寫一致性

    在一些高并發(fā)場景下,為了提升系統(tǒng)的性能,我們通常會將數(shù)據(jù)存儲在 Redis 緩存中,并通過 Redis 緩存來提高系統(tǒng)的讀取速度,這篇文章主要介紹了詳解Mysql中保證緩存與數(shù)據(jù)庫的雙寫一致性,需要的朋友可以參考下
    2024-03-03
  • CentOS下重啟Mysql的各種方法(推薦)

    CentOS下重啟Mysql的各種方法(推薦)

    這篇文章主要介紹了CentOS下重啟Mysql的各種方法(推薦),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • mysql給id設(shè)置默認值為UUID的實現(xiàn)方法

    mysql給id設(shè)置默認值為UUID的實現(xiàn)方法

    由于mysql并不支持默認值為函數(shù)類型,給id設(shè)值有兩種方式,本文主要介紹了mysql給id設(shè)置默認值為UUID的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • MySQL實現(xiàn)查詢分位值的示例代碼

    MySQL實現(xiàn)查詢分位值的示例代碼

    本文主要介紹了MySQL實現(xiàn)查詢分位值的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論

永丰县| 绥滨县| 北海市| 甘德县| 隆林| 涟水县| 彝良县| 响水县| 东海县| 洛南县| 定结县| 鲁甸县| 灵宝市| 芦溪县| 安远县| 凉山| 久治县| 昭通市| 康定县| 江永县| 吉安县| 陵水| 淅川县| 拜城县| 西畴县| 隆子县| 河津市| 永登县| 牙克石市| 阳原县| 渭源县| 乐至县| 卢氏县| 富民县| 蒙城县| 西贡区| 丹江口市| 黄浦区| 堆龙德庆县| 济阳县| 锡林浩特市|