基于语句的复制和基于行的复制两种。
复制是让一台服务器的数据与其他服务器保持同步,通过复制可以让读操作指向备库来获得更好的读扩展。
1、基于语句的复制
在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。实现简单。主备可能存在不同,存在无法被正确复制的SQL。主数据库除了执行语句外,还可能依赖提前因素。例如函数、触发器和存储过程。
2、基于行的复制
把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持。好处是可以正确处理每一行
3、混合类型的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制
利用覆盖索引查询数据,避免回表
对应varchar类型的字符,建立前缀索引,通常是以索引开始的部分字符,这样可以大大节约索引空间,提供索引效率
当where后面跟多个条件时,可以考虑建多列索引,将选择性高的放在前面
1 优化排序
SELECT * FROM `order_assets` WHERE `asset_type` = 'device' ORDER BY `id` desc limit 200000 ,10;
随着偏移量的增加,MySQL需要扫描大量需要丢弃的数据,优化策略是使用延迟关联,通过覆盖索引查询需要的主键
SELECT * FROM `order_assets` INNER JOIN ( SELECT id FROM `order_assets` WHERE `asset_type` = 'device' ORDER BY `id` desc limit 200000 ,10) as x using(id);
2 慢SQL的原因
是否访问了太多不需要的数据行,或者列
扫描了过多的数据