mysql關(guān)聯(lián)查詢速度慢的問題及解決
更新時間:2025年03月13日 15:31:52 作者:一個愛看綜藝的程序猿
這篇文章主要介紹了mysql關(guān)聯(lián)查詢速度慢的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
mysql關(guān)聯(lián)查詢速度慢
1. 記錄原因
mysql關(guān)聯(lián)查詢速度很慢,是由于字段字符集規(guī)則不一致所導致
1.1 在一次線上的服務(wù)中
- 發(fā)現(xiàn)有幾個關(guān)聯(lián)查詢速度特別慢,試過了多種優(yōu)化方案,最后把問題定格在 count() 這個函數(shù)
- 由于是分頁查詢,所以肯定會有count()來去查詢記錄數(shù),但是每次執(zhí)行這個count()都會卡住好幾秒
1.2 最終發(fā)現(xiàn)
- 被關(guān)聯(lián)的兩個表 字符集規(guī)則不一致,一個是utf8_general_ci,另一個是utf8mb4_0900_ai_ci
- 具體原因可能是因為線上服務(wù)器和本地服務(wù)器的mysql版本不同導致的,在覆蓋的時候出現(xiàn)了問題
2. 解決方案
# 查看各個字段的字符集規(guī)則: show full columns from 表名; # 修改字段的字符集: ALTER TABLE 表名 CHANGE 字段名 字段名 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci; # 修改表的默認字符集: ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # 查看數(shù)據(jù)庫編碼: SHOW CREATE DATABASE db_name; # 查看表編碼: SHOW CREATE TABLE tbl_name;
3. 具體操作
- 這邊我是一個字段一個字段的改 把兩個表的字段都統(tǒng)一成了utf8_general_ci格式
ALTER TABLE 表名 CHANGE 字段名 字段名 varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決出現(xiàn)secure_file_priv null的問題
這篇文章主要介紹了解決出現(xiàn)secure_file_priv null的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03mysql實現(xiàn)將字符串字段轉(zhuǎn)為數(shù)字排序或比大小
這篇文章主要介紹了mysql實現(xiàn)將字符串字段轉(zhuǎn)為數(shù)字排序或比大小,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06