mysql查詢快慢分析

2021-08-30 07:50:05 字數 1162 閱讀 8669

同事在做資料包表的時候,由於查詢的表很多,關聯的字段很多.所有在查詢資料的時候一定要考慮效能和查詢速度.

我們查詢資料的時候,大家都知道如果有索引都會查詢會很快的.如果乙個欄位是索引,則mysql會建一張索引表.就相當一本書的目錄.

select a.name from user a where a.id=1.如果id不是索引,那麼查義的時間與id是索引有區別的,這裡只有一張表看不出來.

select a.name from user a left join user_temp b on a.id=b.id;

這裡如果b.id不是索引,查詢的速度兩個表的大小決定,如果a表大小為100行,而b表有100000,則查詢的時間將是一分多鐘(本人測試過),

這我分析一下:由於是左連,a表的每條id會去與b表所有的id比較,結果比較的次數為100*100000次.

如果是這樣,select a.name form user a ,user_temp b where a.id=b.id

或select a.name form user a inner joun user_temp b on a.id=b.id

這兩條是相等的,查詢的時間會比左連線快.但這兩條查詢她很慢.

原因:a表的每個id,只要在b表找到與他相等的id,就會結束,所以次數少於100*100000

如果b表的id是索引,則查詢的速度與上面的比較(根據兩個表越大,越能體現出來).

有時候我們都會為一些常要查詢條件作為索引.但也要考慮索引會不會失

在做資料包表的時候,查詢的條件會很多,關聯的表也為很多,子查詢也非常的多.

如果兩個子查詢關聯,來查詢,那麼,查詢條件的索引就會失效.那麼查詢就如上面那樣.

select a.name ,b.passwrd form a a left join b b on a.name=b.name.

這條查詢,a,b的name我都設定了索引(a表為10000,b表為1000),我查詢的時間很慢.

於是用explain select a.name ,b.passwrd form a a left join b b on a.name=b.name.

發現沒有索引.也就是說索引失效.最後檢視兩個表的時候,發現a.name為gbk,b.name為utf-8,於是把b.name改為utf-8.就行.得出.如果比較的查詢條件,如果為字元型的時候要注意編碼是否一致.

mysql查詢日誌分析 mysql日誌分析

日誌檔案 log 就是乙個跟蹤記錄的列表,它可以協助我們時刻掌握系統及應用服務的動作狀態,在故障排查的時候提供最詳細準確地資訊,幫助我們快速查詢原因,減少我們憑主觀的經驗去猜測,這樣的答案更具有說服力,機器通常是不會撒謊的。任何的系統,無論是作業系統 資料庫 應用伺服器他們都會有自己的log檔案,而...

mysql 慢查詢分析

轉自花開的地方 mysql有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動 的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 long query time 1 log slow queries lo...

mysql 慢查詢分析

mysql有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動 的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 long query time 1 log slow queries log querie...