数据库

作者: bangbang2 | 来源:发表于2022-01-18 21:50 被阅读0次

    1、主从复制

    在主数据库写,在从数据库来读,适用在主数据库被锁表的时候
    1:master数据库将数据的改变记录在binlog中
    2.slave数据库向master探测,如果发生改变,就会创建一个io进程
    [图片上传失败...(image-473223-1642513862753)]

    2、为什么不用b树,用b+树

    b树

    img
    b+树
    img
    1:b+树只有叶子节点会存放数据,b+树的叶子节点有一条链、都是从根节点到叶子节点查找,b+树符合局部性原理 image.png

    索引为什么会失效

    两个列都建立索引,两个列索引进行比较,这样会很慢呐

    image.png

    某一列元素存在null值的

    image.png image.png

    like通配符 ,如果 %明----这样会导致索引失效

    image.png

    innodb和myisam的区别

    mysql是5.5之前的数据库引擎默认是myisam,现在在innodb

    二者的区别:

    1:myisam只支持表级锁, innodb支持表级锁和行级锁,默认是行级锁

    2:innodb支持事务,回滚,崩溃恢复,外键和acid,而myisam数据库只强调性能,都不支持

    3:innodb支持mvcc,多版本并发控制,而myisam不支持

    数据库慢的时候如何优化

    偶尔很慢:

    1:刷新脏页
    数据库的数据先在内存,然后同步到redo log中,在空闲的时候,再将redo log写入到磁盘中,如果redo log要满了,就立即要写入到磁盘里,这时候就会很慢


    image.png

    2:拿不到锁


    image.png

    一直很慢

    1:没有建立索引
    2:有索引,但是没有走索引
    3:表数据太大,没有分库分表

    mysql中自增id可以用做uid吗

    uuid的缺点
    1:uuid是无序的,查找的时候得分页,比较慢
    2:uuid占用的空间比较大

    数据库优化的建议:

    1:都用innodb
    2:字符集统一为是utf-8
    3:单表数据量小于500w
    4:优先选存储最小的数据类型
    5:列定义为not null ,因为null需要单独花空间去存
    6:禁止select *
    7:不要join太多的表
    8禁止赋予super权限

    如何定位和优化慢查询?

    如何定位?
    1:查看慢查询日志,来看已经执行完的慢查询,long_query_time是自己去设置的


    image.png
    image.png
    image.png

    2:show processlist 查看正在执行的慢查询
    3:用explain方法来分析
    在sql语句前加上explain,就会得到mysql的执行计划


    image.png
    当type类型为index和all就需要进行优化,因为这样是全表搜索
    image.png
    如何优化?
    没有索引就建立索引,避免出现不走索引的情况出现

    索引建立的原则

    1:尽量要建立唯一性索引,这样的效率高
    2:最左前缀匹配原则
    遇到范围查询就会停止匹配,尽量保证联合索引的范围查询出现在最后


    image.png

    3:为经常排序、分组的元素建立索引
    4:为常要查询的元素建立索引
    5:限制索引的数目
    6:尽可能用数据类型比较小的索引
    7:删除不用的索引
    8:索引不参与计算

    相关文章

      网友评论

          本文标题:数据库

          本文链接:https://www.haomeiwen.com/subject/aorlhrtx.html