美文网首页
Mysql洗数据中的sql选择与主从延迟

Mysql洗数据中的sql选择与主从延迟

作者: 小丸子的呆地 | 来源:发表于2021-06-22 12:28 被阅读0次

    结论

    读数据

    读数据通常不会一下子把所有数据都读出来,需要用到分页,MySQL的分页查询通常通过limit来实现。
    MySQL的limit基本用法很简单。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。


    image.png

    由上图可以看到单纯的limit语法不会用到表的任何索引,并且随着翻页越来越多,需要扫描的行数也越来越多。
    看一个优化过的语句


    image.png
    首先可以看到使用到了主键索引,这里扫索引就和扫表有很大的性能差距了。
    对比一下耗时可以看到非常巨大的差距。
    image.png

    结论 总结一下网上给出的其他几种优化方法,很明显第一种性能最佳


    image.png

    写数据

    1. 洗数据过程中尽量使用批量处理,大量数据进行清洗过程中,使用批量处理几乎不造成主从延迟;如果逐条执行会造成很高的主从延迟。
      造成主从延迟较高的原因:
      数据内容过大;执行sql条数多,binlog条数多;
      mysql批量原理:
      多条insert操作会合并成insert into table values(),(),()…… binlog中只有一条
      多条replace操作会合并成replace into table values(),(),()…… binlog中只有一条
      例外:
      update语句批量执行,也会造成很高的主从延迟,因为mysql没有对update的类似insert批量处理语句的优化
    2. replace语句在空表状态下与insert语句一样。
      replace原理:
      replace语句在执行过程中会尝试insert,而insert过程首先会检查主键或唯一索引约束,insert语句的insert过程一旦检测到冲突会直接抛出异常,replace语句的insert过程检测到冲突会选择进行delete或直接update操作;
      repace语句在执行insert过程中如果检测到主键冲突,则会删除冲突数据然后进行插入操作;如果检测到唯一约束冲突,则直接进行update操作;
    3. 注意引用的jar包对mysql语句的优化
      java引用mysql-connector-java.jar 对jdbc做mysql实现;注意此jar的版本,使用框架引用的即可。

    相关文章

      网友评论

          本文标题:Mysql洗数据中的sql选择与主从延迟

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