• MySQL-部分简单操作


    一、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.返回数据,同时也在缓存中存一份
    

    image-20201210200813124

    我们可以利用下面的命令查看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
    

    image-20201210202051753

    注意,在这里,我们命中缓存的要求是sql语句需要一模一样,而不是结果一样。

  • 相关阅读:
    钻进 Linux 内核看个究竟
    如何监控 Linux 服务器状态?
    树莓派使用 OLED 屏显示图片及文字
    动态代理学习(二)JDK动态代理源码分析
    动态代理学习(一)自己动手模拟JDK动态代理
    SpringCloudGateWay学习 之 从函数式编程到lambda
    leetCode刷题 | 两数相加
    leetCode刷题 | 两数之和
    数据结构 | 再也不怕被问栈跟队列了
    算法 | 链表的应用,缓存失效算法
  • 原文地址:https://www.cnblogs.com/chiyun/p/14118796.html
Copyright © 2020-2023  润新知