1. 程式人生 > 其它 >MySQL Sending data 查詢資料慢

MySQL Sending data 查詢資料慢

技術標籤:SQLmysql資料庫

專案場景:

專案中總是有查詢很慢的時候 相當於就是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查詢時候的速度,如果不是特殊情況最好不用


解決方案:

  1. 必要的查詢時候去掉XXX欄位查詢,這是可以提高一下效率,設計的時候也最好不給長度過大。
  2. 像這種欄位最好給 雙引號 ’ ’ Empty String 這樣會好一些
  3. 將該欄位抽離出來,放到另外一張表裡面,根據業務情況來定。