• mysql 点总结


     

    2、mysql 配置文件
      二进制日志 log-bin 主从复制
      错误日志 log-error 默认关闭、记录警告和错误、启动和关闭详情
      查询日志 log :默认关闭,记录查询的sql,开启会降低整体性能
      数据文件 /var/lib/mysql frm:存放表结构
      myd:存放表数据  
      myi:存放表索引
      相关配置:windows-my.ini Linux-/etc/my.cnf

    3、存储引擎
      myisam : 表锁、只缓存索引
      innodb : 支持主外键,支持事务,行锁,缓存索引和真实数据    

          

            <1> MyISAM在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行增删改操作前,会自动给涉及的表加写锁。

                   MySQL的表级锁有两种模式:

                                 表共享读锁

                                 表独占写锁

                                 读锁会阻塞写,写锁会阻塞读和写

      <2> 行锁

                  偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发送锁冲突的概率最低,并发度也最高

                  当选中某一行时,如果是通过主键或者索引选中的,这个时候是行级锁;如果是通过其它条件选中的,这个时候行级锁会升级成表锁,其它事务无法对当前表进行更新或插入操作




    4、索引
      <1>排好序的快速查找的一种数据结构
      

      <2>什么情况下,需要创建索引
      (1)主键自动建立唯一索引
      (2)频繁作为查询体哦阿健的自读那要创建索引
      (3)查询中与其他表关联的字段
      (4)查询中排序的字段
      (5)查询中统计或者分组的字段

      <3>什么情况不创建索引
        频繁更新的字段不适合创建索引
        where条件里用不到的字段不创建索引
        表记录很少的
        数据重复且平均分布的字段

      <4>单值索引和组合索引的选择问题?
        高并发建议组合索引(过滤性做好的字段排在前面

      <5>避免索引失效
        (1)最佳左前缀法则
        (2)不在索引上做任何操作
        (3)存储引擎不能使用索引范围条件右边的列
        (4)尽量使用覆盖索引(只查询索引列)!=<>无法使用索引慧导致全表扫描
        (5) is null, is not null 也无法使用索引
        (6) like '%abc...' 索引失效会导致全表扫描
        (7) 字符串 不加单引号 索引失效
        (8) 少用 or , 索引失效

      <6>查询优化
        (1) 小表驱动大表
        (2) order by 子句尽量避免fileSore, order by 子句使用索引最左前列,
          或者 where 子句与 order by 子句条件组合满足索引最左前列
        (3) group by 先排序后分组,遵照最佳左前缀,
          where 高于having, 尽量在where中限定条件

        -------- 在这里面试官肯定会问,有没有做过sql调优
        - 1、使用explain, 查看执行计划;
        1.1、能干吗呢
          (1)表的读取顺序;
          (2)数据读取操作的操作类型;
          (3)哪些索引可以使用;
          (4)哪些索引实际使用;
          (5)表之间的引用;
          (6)每张表有多少行被优化器查看

    5、分区、分库、分表
      查看表分区 SHOW VARIABLES LIKE '%partition%'
      range 分区,list 分区
      mysql 单表容量不超过500W, 否则要水平拆分

    6、行表锁
      <1> 查询锁: mysql>show open tables;
      <2> 读锁:共享锁 lock table 表名 read;
      <3> 写锁:独占锁 lock table 表名 write;
      <4> 表锁偏读(myisam)、行锁偏写(innodb)
      <5> 表锁分析:
      (1)读锁示例: session1 加表1 的读锁
              session2 可读, 不能改(排队等待)
              session1 不可改,不可改其他表

      (2)写锁示例: session1 加表1的写锁
              session1 可读写操作
              session2 不能读(排队等待)

      (3)如何分析表锁定
          sql:show status like 'table%';
          table_locks_immediate: 产生表级锁定的次数
          table_locks_waited: 出现表级别锁定争用而发生等待的次数

      总结:读锁会阻塞写,单不会阻塞读;
          写锁会把读写都阻塞

        <6> 行锁分析
          show status like 'innodb_row_lock%'

    7、主从复制
       slave 会从maaster读取binglong进行数据同步,slave将master的binlog
       拷贝到它的中继日志,mysql 的复制是异步且串行化的;

    8、数据库隔离级别和实现原理

          https://www.jianshu.com/p/05aa6aef105e



    https://www.bilibili.com/video/BV1DK4y1C7o7?from=search&seid=2252694201214978095


  • 相关阅读:
    VisionPro CogCreateCircleTool工具
    VisionPro CogPDF417Tool工具
    VisionPro CogBarcodeTool工具
    VisionPro Cog2DSymbolVerifyTool工具
    VisionPro Cog2DSymbolTool工具 读码工具
    VisionPro CogToolBlock输入输出终端
    VisionPro CogCompositeColorMatchTool
    VisionPro CogColorSegmenterTool
    VisionPro CogColorMatchTool
    VisionPro CogColorExtractorTool工具功能
  • 原文地址:https://www.cnblogs.com/Jomini/p/13215640.html
Copyright © 2020-2023  润新知