当前位置: 首页 > 科技观察

华为程序员面试题:调整SQL的执行顺序,对性能有没有影响

时间:2023-03-16 01:45:46 科技观察

华为程序员面试题:调整SQL的执行顺序对性能有影响吗?最近参加了一个华为面试后台工程师面试。我们有交易系统。每当发生事务操作时,都会发生以下事情。将添加交易记录。买方金额减少X元,卖方金额增加X元。显然,为了保证数据的一致性,我们需要在事务下完成这三个操作。那么,这三个sql的执行顺序对系统的性能有没有影响呢?大家都知道,在数据库中,如果有多个不同的任务同时更新同一行数据,就可能会出现并发问题。为了解决这个问题,Mysql有一个复杂的锁机制。一般情况下,我们通常对只更新某一行的数据使用Mysql的行锁。同时,在所有的数据库操作中,都要保证数据从一种状态到另一种状态的一致性,即事务,那么Mysql事务和锁是什么关系呢?Mysql的行锁是在需要的时候申请的,但是不会马上释放,而是在事务结束后才释放,我们称之为两阶段约定。基于这样的设置,如果我们想要提高系统的整体性能,那么花在等待锁上的时间越少越好。当前数据库操作完成后,尽快提交事务,释放锁,交给下一个任务。上面的例子中,添加一条交易记录一般是不加锁的追加操作,买家金额减少X元。通常一个买家不会同时并发,即使有(比如手机、APP同时下单支付等)那也是极小概率事件,但不是卖家必然如此,尤其是一些爆款产品,卖家的设置可能1秒内完成几百甚至上千并发。所以我们应该把卖家金额的变化放在最后,这样可以大大提高系统的性能。