記錄一次MySQL優化過程遇到的坑

2021-10-10 13:17:56 字數 648 閱讀 8956

相信很多開發都優化sql語句,最近我在優化sql是遇到了乙個坑,在這裡和大家分享一下;

通過頁面抓取到耗時超過3秒的介面,找到對應的sql,設定好相應引數,在測試環境通過explain進行分析,檢視執行計畫,通過分析檢視掃瞄是否走了索引,通過發現全都走了索引,在生產環境也都走了索引,想了很多辦法找不到問題根源。

最後請教了大佬分析,他從資料庫表結構型別去分析,發現我們生產的表採用的是utf8mb4,而測試是utf8,原因是同事前兩天在修改了部分表的字符集,導致了生產環境部分表採用了utf8mb4,部分採用了utf8,關聯表的字符集不一致導致的sql明明走了索引卻很慢的問題。

那麼我們就要看看utf8mb4和utf8有什麼區別了?

utf8mb4是在mysql5.5.3之後增加編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。它是utf8的超集,一般預設都是utf8,而且utf8占用資源相對較少。

mysql支援的utf8編碼最大字元長度為 3 位元組,當遇到 4 位元組的寬字元就會插入異常。3位元組的utf8最大能編碼的 unicode 字元是 0xffff,也就是 unicode 中的基本多文種平面。

在實際的開發過程中,建議使用utf8mb4型別,畢竟相容性好,但是char型別使用utf8mb4會浪費空間,可以將char型別改為varchar型別。

記錄一次sql優化過程

對於我這種剛剛進入dba行業的人來說sql優化是一件很難的事情。所以今天看了一下別人優化的過程順手記錄的一筆。select distinct vi.policy no from odsdata.policy extend info ei,policy vehicle info vi,policy b...

記錄一次java優化過程

昨天乙個朋友問我乙個問題,說他們tomcat伺服器,啟動之後,執行特別慢,特別是第一次訪問,有時要十幾分鐘才有響應。我幫他做了下分析,記錄一下。說到tomcat啟動後執行慢,大家首先想到的是,jsp檔案在首次執行時,系統會將jsp編譯成相應的servlet,所以慢是應該的,第一次執行之後,就不再需要...

一次優化記錄

備註 由於隱私 部分使用了偽 偽sql 直接查十點查全部 select from 使用者優惠券表 where 優惠券id in select id from 優惠券表 where 限制 新使用者 and 90天內 總時間40 秒 這裡用exlpain分析 優惠券id是有索引的,但是實際上沒有走索引。...