新聞中心
MySQL作為被廣泛應(yīng)用的關(guān)系型數(shù)據(jù)庫,幫助大家完成數(shù)據(jù)存儲、數(shù)據(jù)處理以及數(shù)據(jù)分析等相關(guān)工作。在使用MySQL過程中最常遇到的問題大約就是慢查詢或者運算時間很長的問題,那么時間都去哪兒了呢?

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋橡塑保溫等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身制作品質(zhì)網(wǎng)站。
使用SHOW PROFILE
MySQL提供的 SHOW PROFILE語法 ,可以幫助我們分析查詢執(zhí)行的每個步驟極其花費的時間。我們可以通過執(zhí)行 set profiling=1 來開啟此功能。先讓我們看個例子
- select count(*) from user;
- show profile;
通過show profile命令我們可以查看時間主要消耗在了Sending data階段,Sending data狀態(tài)描述的是讀和處理SELECT涉及的行以及發(fā)送數(shù)據(jù)到客戶端:
The thread is reading and processing rows for a SELECT statement, and sending data to the client. Because operations occurring during this state tend to perform large amounts of disk access (reads), it is often the longest-running state over the lifetime of a given query.
其他狀態(tài)的解釋請參考 手冊 。通過分析查詢每個步驟消耗的時間,我們可以有針對性的進行優(yōu)化。讓我們來查看另一個例子。
- select * from user order by email desc limit 1000, 10;
- show profiles;
- show profile for query 2;
通過上邊的例子,我們可以發(fā)現(xiàn)時間主要花到了排序上。
使用 EXPLAIN
我們可以使用EXPLAIN來獲取關(guān)于查詢執(zhí)行計劃的信息, EXPLAIN命令等價于DESCRIBE/DESC。EXPLAIN命令是查看查詢優(yōu)化器如何決定執(zhí)行查詢的主要方法。
EXPLAIN命令可以幫助我們查看查詢我們的SQL語句可能用到的索引(possible_keys)以及影響的行數(shù)(rows),可以幫我們更好的定位慢的原因。每列值得具體解釋請參考 手冊 。此外EXPLAIN也可以看表結(jié)構(gòu)。
目前MySQL提供的工具在分析查詢性能定位上還是比較弱的,但是造成查詢性能底下的原因還是比較明確的:就是訪問的數(shù)據(jù)太多。那么通過調(diào)整索引結(jié)構(gòu)、調(diào)整檢索語句的條件以及重構(gòu)查詢等均能收到不錯的優(yōu)化效果。
通過上述兩個工具我們基本上能夠確定我們的SQL在干什么以及消耗了多少時間,也能夠了解查詢優(yōu)化器為我們做的一些工作,更具它們?yōu)槲覀兲峁┑男畔?,我們可以調(diào)整我的查詢方式來提高我們的查詢效率。
網(wǎng)頁名稱:MySQLQuery時間都去哪兒了
路徑分享:http://fisionsoft.com.cn/article/djghgps.html


咨詢
建站咨詢
