天天看點

MySQL優化篇之慢查詢

1.什麼是MySQL的慢查詢?

mysql中最影響速度的就是那些查詢非常慢的語句,這些慢的語句,可能是寫的不夠合理或者是大資料下多表的聯合查詢等等,是以我們要找出這些語句,分析原因,加以優化。

2.檢視和配置MYSQL慢查詢相關資訊

第一,慢查詢,這個慢,時間上是怎麼定義的?多久才算慢呢?

<a href="http://s3.51cto.com/wyfs02/M00/4C/A2/wKioL1RCNNWiFImTAAB5UqpMCnE319.jpg" target="_blank"></a>

MYSQL有2種類型的變量,一個是伺服器變量(show variables),一個是狀态變量(show status)。這2種變量都分global/session。

從上圖可以看出,10秒以内執行完畢的SQL語句都不算慢查詢。

第二,開啟慢查詢日志記錄功能

如果開啟了慢查詢日志記錄功能,那麼以後隻要SQL語句執行時間超過long_query_time,就會記錄到日志檔案中,友善以後優化了。

<a href="http://s3.51cto.com/wyfs02/M00/4C/A1/wKiom1RCNaXx00omAADK9zHQKvY468.jpg" target="_blank"></a>

可以發現slow_query_log被關閉,并且慢查詢的日志檔案在/mysql/data/localhost-slow.log,也就是MYSQL資料目錄下。

可以利用set指令的方式直接修改,或者在my.cnf配置檔案中的mysqld段進行配置。

<a href="http://s3.51cto.com/wyfs02/M00/4C/A2/wKioL1RCN4uybhxqAADPAKPH-Sw710.jpg" target="_blank"></a>

或者配置my.cnf:

<a href="http://s3.51cto.com/wyfs02/M00/4C/A3/wKioL1RCUDyAeMWCAAAoRpp604o449.jpg" target="_blank"></a>

3.慢查詢實戰

制造一張大表:

<a href="http://s3.51cto.com/wyfs02/M01/4C/A3/wKioL1RCU6HwRV3oAAEqFvrJG-I716.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/4C/A3/wKioL1RCUWThrBedAACv6vPazUY004.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/4C/A2/wKiom1RCUZSSFc0fAABmxzVizDs208.jpg" target="_blank"></a>

可以發現,這條SQL的查詢時間&gt;10秒,那麼在慢查詢日志應該出現相應的記錄。

<a href="http://s3.51cto.com/wyfs02/M00/4C/A2/wKiom1RCUe_zYDDCAAFcz4ndOgY854.jpg" target="_blank"></a>

總結,在實際開發中,我們應該開啟MYSQL的慢查詢功能,通過慢查詢日志來定位哪些SQL的查詢時間過慢,進而去優化它們。

本文轉自zfz_linux_boy 51CTO部落格,原文連結:http://blog.51cto.com/zhangfengzhe/1565527,如需轉載請自行聯系原作者