mysql一般查詢性能 mysql的讀寫速度是什么級(jí)別?
嗯,這個(gè)一般和數(shù)據(jù)大小,硬盤寫入速度,內(nèi)存,cpu處理速度有關(guān)。性能越高,在一條sql語(yǔ)句中處理的小塊數(shù)據(jù)就越多。2020-07-09:MySQL如何啟動(dòng)慢速查詢?而mysqld可以通過(guò)配置log-s
嗯,這個(gè)一般和數(shù)據(jù)大小,硬盤寫入速度,內(nèi)存,cpu處理速度有關(guān)。性能越高,在一條sql語(yǔ)句中處理的小塊數(shù)據(jù)就越多。
2020-07-09:MySQL如何啟動(dòng)慢速查詢?
而mysqld可以通過(guò)配置log-slow-queriesfile-path來(lái)記錄慢速查詢,重啟后生效。
Mysqldumpslow,一個(gè)分析慢速查詢?nèi)罩镜墓ぞ撸蒻ysql官方提供。主要功能包括統(tǒng)計(jì)類型、出現(xiàn)次數(shù)、最長(zhǎng)執(zhí)行時(shí)間、累計(jì)總時(shí)間、等待鎖的時(shí)間、發(fā)送給客戶端的總行數(shù)、總行數(shù)、用戶數(shù)和sql語(yǔ)句本身。這樣可以快速定位問題點(diǎn),也可以為下一條sql提供充分的參考。
有一些第三方工具,但我還沒有 我沒用過(guò)它們。好像有些GUI工具比較好用。你可以搜索他們。我不 我不能用它,因?yàn)槲?我擔(dān)心在生產(chǎn)環(huán)境中部署更多的軟件會(huì)導(dǎo)致更多的安全漏洞。
希望你的回復(fù)會(huì)有幫助。
這個(gè)專業(yè)回答怎么配圖?為什么只有有圖的才能高質(zhì)量回答?
查詢摘要
孔子說(shuō)工欲善其事,必先利其器。 "
善于使用好的性能分析工具,可以讓運(yùn)維效率事半功倍。Pt-query-digest是Percona Toolkit中的常用工具,用于分析MySQL數(shù)據(jù)庫(kù)的慢速日志、二進(jìn)制日志和通用日志,也可以使用從tcpdump中捕獲的show
我來(lái)說(shuō)說(shuō)這個(gè)問題:
題目提到的查詢應(yīng)該是這樣的:select * from a where id in(select id from b)。
對(duì)于這個(gè)sql語(yǔ)句,它的執(zhí)行計(jì)劃不是先查詢表B的所有id,然后再與表A的id進(jìn)行比較..
Mysql會(huì)將in子查詢轉(zhuǎn)換成現(xiàn)有的相關(guān)子查詢,所以實(shí)際上相當(dāng)于這個(gè)sql語(yǔ)句:select * from a where exists(select * from b 循環(huán)出表A中的每一條記錄并與表B進(jìn)行比較,比較的條件是看表A中每一條記錄的id是否存在于表B中,如果存在,則返回表A中的這條記錄..
exists查詢的缺點(diǎn)是什么?
根據(jù)存在的實(shí)現(xiàn)原理,表A(外觀)你可以 如果不使用索引,您必須掃描整個(gè)表,因?yàn)槟獜谋鞟到表B查找數(shù)據(jù),并且您必須使用表A中的數(shù)據(jù)在表B中查找(從表外到表內(nèi)),順序是固定的。
如何優(yōu)化?
索引。但是從上面的分析可以看出,索引只能建立在表B的id字段中,而不能建立在表A的id中,mysql可以 不要用它。
這樣優(yōu)化就夠了嗎?It it'還是有點(diǎn)短。
因?yàn)閑xists只能用表A到表B的數(shù)據(jù)(從表外到表內(nèi))查詢它的執(zhí)行計(jì)劃,雖然它可以在表B的id字段建立索引來(lái)提高查詢效率。
然而,你可以 t從表B到表A依次取數(shù)據(jù),exists子查詢的查詢順序是固定的。
為什么反過(guò)來(lái)呢?
因?yàn)槟闶紫瓤梢源_定的是,反過(guò)來(lái)的結(jié)果是一樣的。這就引出了一個(gè)更詳細(xì)的問題:當(dāng)兩個(gè)表的id字段都有索引時(shí),是表A查表B的效率高還是表B查表A的效率高?
如何進(jìn)一步優(yōu)化?
將查詢修改為inner join連接查詢:select * from an inner join b on(但這還不夠,再往下看)。
為什么不用左連接和右連接?
此時(shí),表之間的連接順序是固定的,
例如,左連接意味著必須先檢查左表并掃描整個(gè)表,然后逐個(gè)轉(zhuǎn)到另一個(gè)表,右連接也是如此。仍然不是最佳選擇。
為什么我可以只使用內(nèi)部連接?
內(nèi)連接中的兩個(gè)表,比如A內(nèi)連接B,但是實(shí)際執(zhí)行順序和寫的順序無(wú)關(guān),最后執(zhí)行的可能是B連接A,順序不固定。如果on條件字段有索引,也可以使用較高的索引。
那怎么才能知道A和B的執(zhí)行順序哪個(gè)更有效率呢?
你不 我不知道,我也不知道。誰(shuí)知道呢?Mysql知道的。讓mysql自己判斷(查詢優(yōu)化器)。mysql查詢優(yōu)化器將評(píng)估每個(gè)案例的成本,并最終選擇最佳的一個(gè)作為執(zhí)行計(jì)劃。
在inner join的連接中,mysql會(huì)評(píng)估是用表A查表B更高效還是用表B查表A更高效,如果兩個(gè)表都有索引,mysql還會(huì)評(píng)估表A的條件字段上的索引效率更高還是表B的更高..
我們需要做的是對(duì)兩個(gè)表的連接條件的兩個(gè)字段進(jìn)行索引,然后解釋,檢查執(zhí)行計(jì)劃,看mysql使用了哪個(gè)索引,最后去掉沒有使用索引的表的字段索引。