问题
测试的时候发现,800w数据的前提下,执行存储过程特别的慢,查看索引都没有问题,单独把sql语句一条条的执行也没有问题,然后就各种找,最终解决了!
看下图,存储过程放3条sql, 就敢输出6s!
字符集不匹配问题
是的没错,这就是我的问题; 算是又get到一个新知识点
要求
1. 数据库字符集
2. 表字符集
3. 表字段字符集
4. 存储过程字符集
以上4个,全部一致!否则某一步骤就慢了
字符集分析
字符集 | 查询 | 修改 |
数据库 | show create database database_name | alter table database_name character set utf8(需要的字符集名称,以utf8为例) |
表及表字段 | show create table table_name | alter table table_name default character set utf8(需要的字符集名称,以utf8为例) |
存储过程 | show create procedure procedure_name | 导入存储过程,导入时若不指定字符集,默认和数据库一致(其他语句方法我不会) |
错误修改
对着”字符集分析“看,将其全部改成一致,问题就迎刃而解了!
案例分析
问题截图
注意这一步骤,如果执行【show profiles】没有任何输出,需要设置变量【set profiling = 1】 这个设置方法是临时的,退出数据库的时候,就自动被修改为默认值0了;
mysql> show profiles;
Empty set, 1 warning (0.00 sec)
mysql> set profiling = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show profiles;
查看数据库字符集
查看表及字段字符集
数据库、表及字段字符集都统一后,重新导入存储过程后执行
完结 撒花~