MySQL優化 使用profiling

2021-10-01 10:16:21 字數 1926 閱讀 8126

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...