mysql sql執行慢示例分析

2021-10-06 21:10:34 字數 801 閱讀 3408

mysql> create table `table_a` (

`id` int(11

) not null,

`b` varchar(10

) default null,

primary key (`id`)

,key `b` (`b`)

) engine=innodb;

執行sql, mysql> select * from table_a where b=『1234567890abcd』;

假設現在表裡面,有 100 萬行資料,其中有 10 萬行資料的 b 的值是』1234567890』,假設現在執行語句是這麼寫的:

這時候,mysql 會怎麼執行呢?

最理想的情況是,mysql 看到字段 b 定義的是 varchar(10),那肯定返回空呀。可惜,

mysql 並沒有這麼做。

那要不,就是把』1234567890abcd』拿到索引裡面去做匹配,肯定也沒能夠快速判斷出

索引樹 b 上並沒有這個值,也很快就能返回空結果。

但實際上,mysql 也不是這麼做的。

這條 sql 語句的執行很慢,流程是這樣的:

在傳給引擎執行的時候,做了字元截斷。因為引擎裡面這個行只定義了長度是 10,所

以只截了前 10 個位元組,就是』1234567890』進去做匹配;

因為是 select *, 所以要做 10 萬次回表;

但是每次回表以後查出整行,到 server 層一判斷,b 的值都不

是』1234567890abcd』;

返回結果是空。

mysql sql執行慢 分析過程

為了驗證select 1 與 select 1 from tablename 與 select from tablename的執行效率,需要測試一下各自執行的時間。於是總結一下,檢視mysql語句執行時間的方法。方法一 show profiles。1.show profiles是5.0.37之後新增...

MySQL SQL執行計畫分析

當我們的系統上線後資料庫的記錄不斷增加,之前寫的一些sql語句或者一些orm操作效率變得非常低。我們不得不考慮sql優化,sql優化大概是這樣乙個流程 1.定位執行效率低的sql語句 定位 2.分析為什麼這段sql執行的效率比較低 分析 3.最後根據第二步分析的結構採取優化措施 解決 而explai...

MySQL SQL執行計畫

sql的執行 通訊階段 查詢快取 解析器進行驗證解析,基於語法戒心和詞法解析得到解析樹 優化器,優化執行階段找到sql的最優執行方式 執行器執行計畫 用explain或者desc檢視sql的執行計畫 執行計畫引數 id sql執行的順序,值大的先執行,id一樣的話,按照順序從上至下執行 select...