Mysql那些事儿

1、limit M,N如何优化?

这个问题比较常见,可以分为以下几种情况
1.数据量小的情况可以直接使用limit M,N
2.数据量中等的情况可以使用数学中的正态曲线来解决此问题,不过前提要计算出where中的总数量
3.数据量大且有上一页写一页的操作,可以在每一页的数据下发一个自增ID,以便可以在下一页的时候where id>xx limit N;上一页的时候where id<xx limit M desc;此问题有个问题就是数据在翻页过程中可能有书籍漏掉的情况
4.数据量大且有直达页的情况,就需要先计算本页所有的ID(此时用到覆盖索引),然后通过自增ID去获取相关数据

2、Mysql 四种隔离级别

隔离级别脏读不可重复读幻读
未提交读可能可能可能
已提交读不可能可能可能
可重复读不可能不可能可能
可串行化不可能不可能不可能

1.未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
2.提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
3.可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
4.串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

1.脏读 :一个事务读取到另一事务未提交的更新数据
2.不可重复读 : 在同一事务中,多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据.
3.可重复读 : 在同一事务中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据。
4.幻读 :一个事务读到另一个事务已提交的insert数据

    原文作者:Myron_宋庆鹤
    原文地址: https://segmentfault.com/a/1190000010515483
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞