mysql關(guān)聯(lián)查詢速度慢的問題及解決
mysql關(guān)聯(lián)查詢速度慢
1. 記錄原因
mysql關(guān)聯(lián)查詢速度很慢,是由于字段字符集規(guī)則不一致所導(dǎo)致
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版本不同導(dǎo)致的,在覆蓋的時候出現(xiàn)了問題
2. 解決方案
# 查看各個字段的字符集規(guī)則: show full columns from 表名; # 修改字段的字符集: ALTER TABLE 表名 CHANGE 字段名 字段名 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci; # 修改表的默認(rèn)字符集: 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)文章
mysql處理海量數(shù)據(jù)時的一些優(yōu)化查詢速度方法
最近一段時間由于工作需要,開始關(guān)注針對Mysql數(shù)據(jù)庫的select查詢語句的相關(guān)優(yōu)化方法,需要的朋友可以參考下2017-04-04
通過sysbench工具實現(xiàn)MySQL數(shù)據(jù)庫的性能測試的方法
sysbench是一款壓力測試工具,可以測試系統(tǒng)的硬件性能,也可以用來對數(shù)據(jù)庫進(jìn)行基準(zhǔn)測試。這篇文章主要介紹了通過sysbench工具實現(xiàn)MySQL數(shù)據(jù)庫的性能測試 ,需要的朋友可以參考下2019-07-07
3種高效的Tags標(biāo)簽系統(tǒng)數(shù)據(jù)庫設(shè)計方案分享
這篇文章主要介紹了3種高效的Tags標(biāo)簽系統(tǒng)數(shù)據(jù)庫設(shè)計方案分享,現(xiàn)在主流的博客、CMS系統(tǒng)都有一個標(biāo)簽系統(tǒng),本文就探討它的數(shù)據(jù)庫設(shè)計方式,需要的朋友可以參考下2014-07-07
Docker安裝MySQL鏡像的詳細(xì)步驟(適合新手小白)
本文詳細(xì)介紹了如何在Ubuntu環(huán)境下使用Docker安裝MySQL5.7版本,包括從官網(wǎng)拉取鏡像、配置MySQL容器、設(shè)置權(quán)限及內(nèi)網(wǎng)部署,為讀者展示了容器化MySQL的實踐過程,需要的朋友可以參考下2025-05-05
innodb_index_stats導(dǎo)入備份數(shù)據(jù)時報錯表主鍵沖突的解決方法
下面小編就為大家?guī)硪黄猧nnodb_index_stats導(dǎo)入備份數(shù)據(jù)時報錯表主鍵沖突的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
MYSQL ERROR 1045 (28000): Access denied for user (using pass
Mysql中添加用戶之后可能出現(xiàn)登錄時提示ERROR 1045 (28000): Access denied for user的錯誤.2009-07-07

