一、MySQL部分简单操作
一般mysql的单表瓶颈大概是五百万条数据,这个时候我们需要水平拆分,也就是分表,但是注意,生产环境下分表的时候我们需要把表分在两台不同的机器上,如果还是在同一个机器上其实是没有意义的,因为如果在同一台机器上那么消耗的资源还是一样的,没太大区别。同理我们的数据库瓶颈大概在五千万条,也需要分库了。
数据库建模优化:说白了,就是怎么设计数据库和表的优化
mysql中文乱码如何解决:分三步
1、一般是先修改字符集,也就是先去修改配置文件,让mysql支持utf8的中文字符集
vim /etc/my.cnf
character_set_server=utf8
2、重启mysql
systemctl restart mysql
3、因为原来的数据库和表还是使用原来的拉丁字符集,所以我们还需要修改已经存在的库和表的字符集,此处就是在mysql终端里执行了
alter databases 数据库名 character set 'utf8';
alter table 表名 convert to character set 'utf8';
杂项配置:
show variables like 'sql_mode'
# 当拉下公司项目的时候,执行这个看一下数据库的sql_mode,把自己本地的sql_mode改成和他一模一样,这样可以排除一些错误。防止公司项目在你机器上无法启动。
mysql逻辑架构:也就是我们一条
1.首先我们的请求是进入mysql的连接池
2.之后会先进缓存和缓冲区,如果在这能命中数据,那么就不需要查表了,提高了速度
3.如果未命中缓存,那么进入sql的接口
4.然后进入解析器,分析一下sql语句的复杂程度
5.进入优化器,在不影响结果的情况下,调整sql的执行顺序,让sql执行效率最高,生成执行计划
7.最后存储引擎执行sql,拿回数据
8.返回数据,同时也在缓存中存一份
我们可以利用下面的命令查看sql的执行周期
# 因为我们要证明上面的过程,其中有一步是到缓存中拿数据,mysql默认不开启缓存,我们去配置文件修改一下
vim /etc/my.cnf
query_cache_type=1 # 新增一行
# 重启mysql
# 进入我们的mysql,开启profiling
show variables like '%profiling%';
set profiling=1;
# 然后进行一次正常查询
select * from xxx;
show profiles; # 可以看到一些简略的信息,记下id,比如2
show profile cpu,block io for query 2 #就是前面的id
注意,在这里,我们命中缓存的要求是sql语句需要一模一样,而不是结果一样。