我们为什么要分库分表
本文转自: https://baijiahao.baidu.com/s?id=1627688882923429891&wfr=spider&for=pc 当一张表的数据达到几千万时,查询一次所花的时间会变长。这时候,如果有联合查询的话,可能会卡死在那儿,甚至把系统给拖垮。 而分库分表的目的就在于此:减小数据库的负担,提高数据库的效率,缩短查询时间。另外,因为分库分表这种改造是可控的,底层还是基于RDBMS,因此整个数据库的运维体系以及相关基础设施都是可重用的。 目前我们系统将近20亿数据,每张表最大的接近600w条/表,每条数据大约3k,每个表将近1.5G的数据。查询经常超时,单条SQL执行count(*)查询时间达到了最大260ms,0.26s(标准是超过0.1s的数据为慢SQL)。 为了说明我们为什么要分库分表,我们看一下sql的执行过程。 mysql执行一条sql的过程如下: 1、收到sql 2、把sql放到排队队列中 3、执行sql 4、返回结果 在这个执行过程中最花时间的地方在于: 1.排队等待的时间, 2.sql的执行时间。 如果有2个sql都要同时修改同一张表的同一条数据,mysql对这种情况的处理是:一种是表锁定(MyISAM存储引擎),一个是行锁定(InnoDB存储引擎)。 表锁定表示其他操作都不能对这张表进行操作,必须等当前对表的操作完才行。行锁定也一样