日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 查詢速度慢的原因

瀏覽:273日期:2023-10-02 14:59:52
目錄一、慢在哪?二、是否查詢了不需要的數(shù)據(jù)1. 查詢不需要的記錄2. 多表關(guān)聯(lián)時返回全部列3. 總是查詢出全部列4. 重復(fù)查詢相同的數(shù)據(jù)三、是否掃描了額外的記錄1. 響應(yīng)時間2. 掃描的行數(shù)和返回的行數(shù)3. 掃描的行數(shù)和訪問類型

談到MySQL性能優(yōu)化,查詢優(yōu)化作為優(yōu)化的源頭,它也是最能體現(xiàn)一個系統(tǒng)是否更快。本章以及接下來的幾章將會著重講解關(guān)于查詢性能優(yōu)化的內(nèi)容,從中會介紹一些查詢優(yōu)化的技巧,幫助大家更深刻地理解MySQL如何真正地執(zhí)行查詢、究竟慢在哪里、如何讓其快起來,并明白高效和低效的原因何在,這樣更有助于你更好的來優(yōu)化查詢SQL語句。

本章從“為什么查詢速度這么慢”開始談起,讓你能夠清楚的知道查詢可能會慢在哪些環(huán)節(jié),這樣將有助于你更好的優(yōu)化查詢,做到心中有數(shù),高人一籌。

一、慢在哪?

**真正衡量查詢速度的是響應(yīng)時間。**如果把查詢看作是一個任務(wù),那么它是由一系列子任務(wù)組成的,每個任務(wù)都會消耗一定的時間。如果要優(yōu)化查詢,實際上要優(yōu)化其子任務(wù),那么消除其中一些子任務(wù),那么減少子任務(wù)的執(zhí)行次數(shù),要么讓子任務(wù)運行的更快。

MySQL在執(zhí)行查詢的時候,有哪些子任務(wù),哪些子任務(wù)花費的時間最多?這就需要借助一些工具,或者一些方法(如:執(zhí)行計劃)對查詢進行剖析,來定位發(fā)現(xiàn)究竟慢在哪。

通常來說,查詢的生命周期大致大致可以按照順序來看:**從客戶端到服務(wù)器,然后在服務(wù)器上進行解析,生成執(zhí)行計劃,執(zhí)行,并返回結(jié)果給客戶端。**其中,“執(zhí)行”可以認為是整個生命周期中最重要的階段,這其中包括了大量為了檢索數(shù)據(jù)到存儲引擎的調(diào)用以及調(diào)用后的數(shù)據(jù)處理,包括排序、分組等。

在完成這些任務(wù)的時候,查詢需要在不同階段的不同地方花費時間,包括網(wǎng)絡(luò)、CPU計算,生成統(tǒng)計信息和執(zhí)行計劃、鎖等待等操作,尤其是向底層存儲引擎檢索數(shù)據(jù)的調(diào)用操作,這些調(diào)用需要在內(nèi)存操作、CPU操作,還可能會產(chǎn)生大量的上下文切換以及系統(tǒng)調(diào)用。

在上述這些操作中,都會消耗大量的時間,其中會存在一些不必要的額外操作,其中有些操作可能被額外地重復(fù)執(zhí)行了很多次、某些操作執(zhí)行的很慢等等。這也就是查詢真正可能慢的地方,優(yōu)化查詢的目的就是減少和消除這些操作所花費的時間。

通過上面的分析,我們對查詢的過程有了整體的了解,能夠清楚的知道查詢可能在哪些地方會存在問題,最終導(dǎo)致整個查詢很慢,為實際查詢優(yōu)化提供方向。

換言之,查詢優(yōu)化可以從以下兩個角度來出發(fā):

減少子查詢次數(shù) 減少額外、重復(fù)的操作

查詢性能低下常見的原因是訪問的數(shù)據(jù)太多。在數(shù)據(jù)量小的時候,查詢速度還不錯,一旦數(shù)據(jù)量上來,查詢速度將會發(fā)生巨變,讓人抓狂、體驗極差。針對查詢優(yōu)化方面,可以從以下方面進行排查:

是否查詢了不需要的數(shù)據(jù) 是否掃描了額外的記錄 二、是否查詢了不需要的數(shù)據(jù)

在實際查詢中很多時候,會查詢了實際需要的數(shù)據(jù),然后這些多余的數(shù)據(jù)會被應(yīng)用程序丟棄。這對MySQL來說是額外的開銷,同時也會消耗應(yīng)用服務(wù)器的CPU和內(nèi)存資源。

一些典型案例如下:

1. 查詢不需要的記錄

這是一個常見的錯誤,常常會誤以為MySQL只會返回需要的數(shù)據(jù),實際上MySQL卻是先返回全部結(jié)果集再進行計算。

開發(fā)者習(xí)慣性的先使用SELECT語句查詢大量的結(jié)果,然后由應(yīng)用查詢或者前端展示層再獲取前面的N行數(shù)據(jù),例如,在新聞網(wǎng)站中查詢100條記錄,但是只是在頁面上顯示前10條。

最有效的解決方法是需要多少記錄就查詢多少記錄,通常會在查詢后面加上LIMIT,即:分頁查詢。

2. 多表關(guān)聯(lián)時返回全部列

如果你想查詢所有在電影Academy Dinosaur中出現(xiàn)的演員,千萬不要按下面的方式來進行查詢:

select * fromt actor ainner join film_actor fa.actorId = a.actorIdinner join film f f.filmId = fa.filmIdwhere fa.title = ’Academy Dinosaur’;

這樣將會返回三張表的全部數(shù)據(jù)列,而實際需求是要查詢演員信息,正確的寫法應(yīng)該是:

select a.* fromt actor ainner join film_actor fa.actorId = a.actorIdinner join film f f.filmId = fa.filmIdwhere fa.title = ’Academy Dinosaur’;3. 總是查詢出全部列

每次看到select *的時候一定要用異樣的目光來審視它,是不是真的需要返回全部數(shù)據(jù)列?

在大部分情況下,是不需要的。select *會導(dǎo)致進行全表掃描,會讓優(yōu)化器無法完成索引掃描這類優(yōu)化,過多的列還會為服務(wù)器帶來額外的I/O、內(nèi)存和CPU的消耗。即使真的需要查詢出全部列,應(yīng)該逐個羅列出全部列而不是*。

4. 重復(fù)查詢相同的數(shù)據(jù)

如果你不太留意,很容易出現(xiàn)這樣的錯誤:不斷地重復(fù)執(zhí)行相同的查詢,然后每次都返回完全相同的數(shù)據(jù)。

例如,在用戶評論的地方需要查詢用戶頭像的URL,那么用戶多次評論的時候,可能就會反復(fù)來查詢這個數(shù)據(jù)。比較好處理方法是,在初次查詢的時候?qū)⑦@個數(shù)據(jù)緩存起來,后續(xù)使用時直接從緩存中取出。

三、是否掃描了額外的記錄

確定查詢只查詢了需要的數(shù)據(jù)以后,接下來應(yīng)該看看查詢過程中是否掃描了過多的數(shù)據(jù)。對于MySQL,最簡單衡量查詢開銷的三個指標如下:

響應(yīng)時間 掃描的行數(shù) 返回的行數(shù)

沒有哪個指標能夠完全來衡量查詢的開銷,但它們能夠大致反映MySQL內(nèi)部執(zhí)行查詢時需要訪問多少數(shù)據(jù),并可以大概推算出查詢運行的實際。這三個指標都會記錄到MySQL的慢日志中,所以檢查慢日志記錄是找出掃描行數(shù)過多查詢的辦法。

慢查詢:用于記錄在MySQL中響應(yīng)時間超過閾值(long_query_time,默認10s)的語句,并會將慢查詢記錄到慢日志中。可通過變量slow_query_long來開啟慢查詢,默認是關(guān)閉狀態(tài),可以將慢日志記錄到表slow_log或文件中,以供檢查分析。

1. 響應(yīng)時間

響應(yīng)時間是兩個部分之和:服務(wù)時間和排隊時間。服務(wù)時間是指數(shù)據(jù)庫處理這個查詢真正花費了多長時間。排隊時間是指服務(wù)器因為等待某些資源而沒有真正執(zhí)行查詢的時間,可能是等待I/O操作,也可能是等待行鎖等等。

在不同類型的應(yīng)用壓力下,響應(yīng)時間并沒有什么一致的規(guī)律或者公式。諸如存儲引擎的鎖(表鎖,行鎖),高并發(fā)資源競爭,硬件響應(yīng)等諸多因素都會影響響應(yīng)時間,所以,響應(yīng)時間既可能是一個問題的結(jié)果也可能是一個問題的原因,不同案例情況不同。

當你看到一個查詢的響應(yīng)時間的時候,首先需要問問自己,這個響應(yīng)時間是否是一個合理的值。

2. 掃描的行數(shù)和返回的行數(shù)

在分析查詢時,查看該查詢掃描的行數(shù)是非常有幫助的,在此之上也能夠分析是否掃描了額外的記錄。

對于找出那些糟糕查詢,這個指標可能還不夠完美,因為并不是所有行的訪問代價都是相同的。較短的行的訪問速度相當快,內(nèi)存中的行也比磁盤中的行的訪問速度要快的多。

**理想的情況下,掃描的行數(shù)和返回的行數(shù)應(yīng)該是相同的。**但實際上這種美事并不多,例如在做一個關(guān)聯(lián)查詢的時候,掃描的行數(shù)和對返回的行數(shù)的比率通常都很小,一般在1:1和10:1之間,不過有時候這個值也可能非常大。

3. 掃描的行數(shù)和訪問類型

在評估查詢開銷的時候,需要考慮一下從表中找到某一行數(shù)據(jù)的成本。MySQL有好幾種訪問方式可以查找并返回一行結(jié)果。這些訪問方式可能需要訪問很多行才能返回一條結(jié)果,也有些訪問方式可能無需掃描就能返回結(jié)果。

在執(zhí)行計劃EXPLAIN語句中的type列反映了訪問類型。訪問類型有很多種,從全表掃描到索引掃描,范圍掃描,唯一索引,常數(shù)索引等。這里列的這些,速度是從慢到快,掃描的行數(shù)也是從多到少。

如果查詢沒有辦法找到合適的訪問類型,那么解決的最好辦法通常就是增加一個合適的索引,這也是我們之前討論索引的問題。現(xiàn)在應(yīng)該明白為什么索引對于查詢優(yōu)化如此重要了。索引讓MySQL以最高效,掃描行數(shù)最少的方式找到需要的記錄。

如果發(fā)現(xiàn)查詢掃描了大量的數(shù)據(jù)但只返回少數(shù)的行,通常可以嘗試下面的技巧去優(yōu)化它:

使用索引覆蓋掃描,把所有需要用的列都放到索引中,這樣存儲引擎無需回表獲取對應(yīng)的行就可以返回結(jié)果了。 優(yōu)化表結(jié)構(gòu)。例如使用單獨的匯總表來完成查詢。 重寫復(fù)雜查詢,讓MySQL優(yōu)化器能夠以更優(yōu)化的方式執(zhí)行這個查詢。

以上就是MySQL 查詢速度慢的原因的詳細內(nèi)容,更多關(guān)于MySQL 查詢速度慢的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线综合亚洲| 欧美成人基地| 亚洲网站视频| 性欧美精品高清| 亚洲深深色噜噜狠狠爱网站| 青青草国产成人99久久| 激情婷婷综合| 婷婷国产精品| 午夜久久免费观看| 亚洲欧美日韩精品一区二区| 一区二区电影在线观看| 五月亚洲婷婷 | 久久一区精品| 你懂的国产精品永久在线| 麻豆精品久久久| 国产成人免费精品| 亚洲欧洲高清| 欧美另类专区| 日韩在线电影| 国产精品高清一区二区| 国产在线日韩精品| 久久精品国内一区二区三区水蜜桃| 久久久国产精品入口麻豆 | 国产日韩在线观看视频| 日韩精品诱惑一区?区三区| 日韩欧美美女在线观看| 欧美精品aa| 精品视频在线观看网站| 久久电影tv| 激情婷婷综合| 亚洲精品国产精品粉嫩| 国产日产一区| 成人一区而且| 欧美aa一级| 美女精品一区| 国产精品视频3p| 日韩在线综合| 国产精品社区| 国产精品美女午夜爽爽| av在线最新| 亚洲欧美日韩国产一区| 一区二区三区国产在线| 国产欧美一区二区三区米奇| 国产在线看片免费视频在线观看| 欧美日韩日本国产亚洲在线| 亚洲精品国产日韩| 精品高清久久| 久久成人一区| 精品淫伦v久久水蜜桃| 美女少妇全过程你懂的久久| 天堂av一区| 欧美国产日本| 亚洲大全视频| 欧美日韩国产综合网| 亚洲综合专区| 欧美黄色一区| 国产免费播放一区二区| 国产探花一区二区| av日韩中文| 国产精品久久久久77777丨| 亚洲精品韩国| 久久久精品日韩| 久久福利一区| 国产不卡精品在线| 久久高清免费观看| 国产videos久久| 最新亚洲国产| 日韩理论视频| 欧美日一区二区三区在线观看国产免 | 91一区二区三区四区| 欧美日韩在线二区| 国产日韩一区二区三区在线 | 久久永久免费| 一区二区小说| 国产高清亚洲| 99久久精品国产亚洲精品| 日本成人在线不卡视频| 成人久久久久| 国产精品欧美大片| 日韩精品一二三| 中文字幕人成乱码在线观看| 日韩中出av| 欧美99久久| 国产精品videossex久久发布| 91成人超碰| 高清久久精品| 乱人伦精品视频在线观看| 国产不卡人人| 国产精品一区二区三区美女| 亚洲欧洲一区二区天堂久久| 欧美天堂一区二区| 亚洲综合不卡| 天堂日韩电影| 国产一区二区三区不卡视频网站| 日韩美女国产精品| 伊人久久亚洲影院| 国产黄大片在线观看| 欧美一区影院| 宅男噜噜噜66国产日韩在线观看| av高清不卡| 日韩av在线播放中文字幕| 精品中文字幕一区二区三区av| 中文在线а√在线8| 久久99免费视频| 日本在线不卡视频| 午夜精品亚洲| 亚洲最新无码中文字幕久久 | 国产精品伦理久久久久久| 国产精品久久久久久久久久久久久久久 | 蜜桃视频在线观看一区| 国产精品嫩模av在线| 亚洲欧洲av| 午夜久久影院| 午夜国产一区二区| 激情久久久久久| 国产精品最新| 国产精品白丝av嫩草影院| 欧美日韩水蜜桃| 伊人久久亚洲| 成人一二三区| 精品亚洲a∨| 五月综合激情| 国产精品乱战久久久| 日韩国产欧美在线播放| 亚洲字幕久久| 日本不卡不码高清免费观看| 国产精品成久久久久| 亚洲一区二区日韩| 91亚洲无吗| 亚洲二区免费| 国产精品日本| 国产精品最新自拍| 成人在线视频中文字幕| 伊人久久在线| 中文一区一区三区高中清不卡免费| 亚洲综合日韩| 国产精品成人一区二区不卡| 久久这里只有精品一区二区| 午夜欧美精品久久久久久久| 视频一区国产视频| 国产日韩一区二区三免费高清| 日韩在线综合| 日本不卡一区二区| 日本免费久久| 日韩精品亚洲专区| 国产精品igao视频网网址不卡日韩 | 免费一级片91| 麻豆精品久久| 久久激情网站| 99久久亚洲精品蜜臀| 伊人久久成人| 国产精品一区二区精品视频观看 | 久久国产精品99国产| 亚洲激情社区| 91精品国产自产精品男人的天堂| 国产欧美精品| 国产精区一区二区| 黑丝一区二区| 麻豆成人综合网| 精品中文字幕一区二区三区四区| 国产精品99一区二区三| 精品捆绑调教一区二区三区| 日本一区二区高清不卡| 午夜欧美精品| 久久国产三级| 99久久www免费| 日韩视频一区| 国产精品夜夜夜| 蜜臀国产一区| 日本午夜精品| 免费日韩av| 亚洲精品福利电影| 日韩高清在线不卡| 亚洲精品91| 在线视频观看日韩| 国产乱人伦丫前精品视频| 一级欧洲+日本+国产| 9999国产精品| 日韩精品一级中文字幕精品视频免费观看 | 国产精品久久久久久久免费软件 | 久久国产成人| 日韩欧美一区二区三区在线视频| 久久99影视| 亚洲香蕉久久| 亚洲精品四区| 性欧美长视频| 一区二区精品伦理...| 日本aⅴ亚洲精品中文乱码| 日韩中文首页| 在线日韩成人| 激情视频一区二区三区| 精品午夜视频| 中文字幕免费精品| 亚洲高清二区| 欧美日韩中文字幕一区二区三区| 不卡一二三区| 欧洲一级精品| 国产精品美女久久久| 亚洲免费成人| 蘑菇福利视频一区播放|