深入MySQL用户自定义变量:使用详解及其使用场景案例

一、前言在前段工作中,曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如,当用户在某超级话题下连续第n(n即计数器的值)次进行转发帖子时,将会获得与n相关的分数。然而,在第一次改进后问题依然存在。所以,这次在之前的基础上,通过使用MySQL变量的途径来解决该问题。二、到底MySQL的变量分哪几类?MySQL变量一共分为两大类:用户自定义变量和系统变量。如下用户自定义变量局部变量会话变量系统变量会话变量全局变量本文涉及的内容为用户自定义会话变量,若对其他分类无感,请点击这里。PS:用户定义的会话变量和系统定义的会话变量有什么区别?局部变量局部变量一般用于SQL的语句块中,比如存储过程中的begin和end语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。DROP PROCEDURE IF EXISTS ADD;... Read More

高并发、分布式数据库场景下需要注意的 UPDATE SQL 写法

业务模块超级话题签到积分具体场景更新签到积分行为表integration_record - 每次产生积分行为的记录表。即每当用户产生积分行为(如:在超级话题内进行签到、转发和回复等行为),就会增加一条integration_record表的记录。表明该用户在该超级话题下通过哪些行为产生了多少积分增量。integration - 每个用户的总积分表。即在每次写入一条integration_record记录后,会将积分增量累计加入到该表的总积分字段中。表明目前为止,该用户在该超级话题下通过积分行为一共获取的积分总数。表的细节就不给出了(也没必要)。这两张表都以话题ID(topic_id)和用户ID(uid_id)进行联合索引。具体问题在某些情况下,某个用户所在某个话题下的所有integration_record记录的积分总和小于该用户在该话题下的integration表记录的总积分。异常日志通... Read More

SQL 优化分享 还有那大部门 TB

今天例会中,作为新同学,向大家分享了自己在工作中关于SQL优化的分享(长微博)。尽管只是皮毛,但不积跬步无以至千里,不积小流无以成江海。下面给出PPT的内容。分析浅显,大家海涵! ^.PP问题其中,有同学指出:“如果复合索引中的state字段为0的概率大于50%,可以考虑不建立state的索引;否则,反之”。天天T前段时间,我们大部门TB啦!猜猜这是哪里?走到这里才发现,这不是跑男第二季中某一集的场地么。难怪这一路都觉得似曾相识 Read More

MySQL 数据库优化笔记

视频地址:http://www.imooc.com/video/368可以从以下几个方面进行优化硬件系统配置数据表结构SQL语句和索引一般来说,上述方式的实现成本(自上而下)由高到低,而效果(自上而下)由低到高。使用慢查询日志使用系统的慢查询日子来监控有问题的SQL。show variables like 'slow_query_log'set global slow_query_log_file = '/home/mysql/log/slow_query_log.log'set global log_queries_no_using_indexes = onset global long_query_time = 慢查询分析工具pt-query-diges如何发现有问题的SQ查询次数多,且占用时间长的(通常为pt-query-digest分析中前几个SQL);IO大得SQL(注意... Read More