MYSQL CASE WHEN TEHN (同时修改多条记录)

        在之前维护的项目中,有这么一个需求,就是每天定时给用户增加积分,但是项目中是使用的for循环一条一条修改的用户积分和积分记录,刚开始还可以,后来用户量达到一千多的时候,执行完整个程序需要用 将近两分钟的时间,没办法,只有将这段代码删了重新写!!!

        因为每个用户增加的积分不同,所以不能使用一条update语句直接修改,只能使用switch case 但是,问题又来了,万一以后用户量涨到一万的时候,性能又是一个问题,单单是sql就要特别大。

        所以,以1000为单位去执行修改是比较不错的办法,耗费的时间也不是很多。

      UPDATE table SET money =  CASE id  WHEN 1 THEN money+10  WHEN 2 money +20 ......END

     因为mysql 和PHP是两个相互独立的程序,程序间的交互,最耗费时间的就是通信。

     如果是用for循环来执行很多sql语句,并且还加了事务,那么第二条sql要等第一条执行完并且由mysql返回给PHP处理之后才能由PHP继续交给mysql执行,这样一来,mysql和PHP间的通信占用的大量的时间。

     所以,多条sql语句最好尽可能的缩减成一条,或者多条。这样可以很好地提升系统的性能。

    switch case 还可用于查询。直接上代码,有时间大家可以尝试一下:

SELECT CASE u.sex WHEN 1 THEN 'man' WHEN 0 THEN 'WOMAN' FROM user  u

 

 

你可能感兴趣的:(MYSQL)