MySQL Sending data 查詢資料慢
阿新 • • 發佈:2020-12-13
專案場景:
專案中總是有查詢很慢的時候 相當於就是Sending data資料的時候很慢
問題描述:
這時候我們就要看他的處理過程了
show processlist;
這時可以檢視他的 State 狀態,他的狀態可能是 Sending data
這是MySQL在做 “收集 + 傳送 資料”;
在進一步排查
show profile;
這時候就看Duration哪裡耗時最長
哪裡耗時最長就是哪裡的問題
一般是Sending data
也可以這樣看一下
explain select * from table;
排查對比:
1. 表的設計一個欄位為 XXX varchar(6000) DEFAULT NULL,而且該表中也有text型別為空的欄位
2. 連表查詢資料量大
原因分析:
- 當Innodb的儲存格式是 ROW_FORMAT=COMPACT (or ROW_FORMAT=REDUNDANT)的時候,Innodb只會儲存前768位元組的長度,剩餘的資料存放到“溢位頁”中。
show table status;
其實就是如果varchar型別如果長度過大的話,而且還是空的話,他會去比較,所以慢了
而且text型別也是會影響MySQL查詢時候的速度,如果不是特殊情況最好不用
解決方案:
- 必要的查詢時候去掉XXX欄位查詢,這是可以提高一下效率,設計的時候也最好不給長度過大。
- 像這種欄位最好給 雙引號 ’ ’ Empty String 這樣會好一些
- 將該欄位抽離出來,放到另外一張表裡面,根據業務情況來定。