mysql在5.0之後有個分析查詢語句非常重要的利器,就是profiling。
要是用profiling,我們首先要開啟profiling。
set profiling=on;
設定了profiling之後,你的每乙個sql語句都會被記錄分析。使用show profiles;可以檢視在開啟profiling之後所有被記錄的操作。(這裡只是為了舉例,使用了非常簡單的查詢)
+----------+------------+--------------------+
| query_id | duration | query |
+----------+------------+--------------------+
| 1 | 0.00007075 | select * from test |
| 2 | 0.00005275 | show tables |
| 3 | 0.00025975 | show databases |
| 4 | 0.00011925 | select database() |
| 5 | 0.00018650 | show databases |
| 6 | 0.00009825 | show tables |
| 7 | 0.00020875 | select * from test |
| 8 | 0.00005250 | show profilings |
| 9 | 0.00005025 | show profilies |
+----------+------------+--------------------+
可以看到mysql為每乙個操作生成了乙個query_id,我們可以使用show profile for query 7這樣的形式來檢視第七條語句具體的執行過程分析。
+----------------------+----------+
| status | duration |
+----------------------+----------+
| starting | 0.000051 |
| checking permissions | 0.000006 |
| opening tables | 0.000019 |
| init | 0.000017 |
| system lock | 0.000008 |
| optimizing | 0.000005 |
| statistics | 0.000011 |
| preparing | 0.000009 |
| executing | 0.000002 |
| sending data | 0.000051 |
| end | 0.000003 |
| query end | 0.000005 |
| closing tables | 0.000006 |
| freeing items | 0.000008 |
| cleaning up | 0.000008 |
+----------------------+----------+
可以看到mysql為我們生成了操作在執行過程中每乙個步驟所耗費的時間,通過profiling我們就可以查詢出sql語句中耗時的地方,並加以優化。
以下狀態解釋來自網路部落格:
mysql分析 Mysql分析 profile詳解
一。前言 當我們要對某一條sql的效能進行分析時,可以使用它。profiling是從 mysql5.0.3版本以後才開放的。啟動profile之後,所有查詢包括錯誤的語句都會記錄在內。關閉會話或者set profiling 0 就關閉了。如果將profiling history size引數設定為0...
mysql使用優化記錄
使用in語句,in的列表明確並且有限時,可以使用。因為此時搜尋引擎會使用索引,但in的是乙個查詢結果時,索引將會沒有作用,會查詢全表。例子 使用in查詢時,in的列表有限且明確 select from on auction where pid in 10,11,20 此時的執行計畫,會使用建立在pi...
MySQL 優化 FIND IN SET 使用
背景最近在優化專案遇到乙個場景 資料庫表中某個字段儲存是多個字串連線的 如 合同1 contract1 對應多個聯絡人 linker1,linker2,這樣 合同a 的id 對應訂單的儲存就是 order1,order2 我們需要查詢 linker2 和 多少個合同有關 怎麼辦呢?使用 find i...