前言
服务器中存放新闻数据的一张表查询已经变得非常慢
经过查询发现数据已经达到1.8亿数据量,没有分过表,以至于查询变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。
当出现这种情况时,我们可以考虑分表,即将单个数据库表进行拆分,拆分成多个数据表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。
这里使用MERGE分表法来实现分表。
环境
centos6.7
mysql5.6.29
实现
实现分表的备份工作要做好,本地服务器测试两次后操作线上服务器还是有点慌。。
首先备份表结构和数据
mysqldump -uroot -p 数据库 表名 >/home/bakmysql/20190513/result.sql
数据库原来的表是Inoodb类型,如果使用merge的话需要将数据库引擎类型修改为MyISAM
ALTER TABLE result ENGINE=MyISAM;
修改提示出现问题,搜了一下发现是外键的原因,原来的表中是带有外键的
需要先将外键删除才可以继续执行修改引擎操作
代码已经修改过,删除外键不会影响实际网站
ALTER TABLE `result` DROP FOREIGN KEY `FK41175491`
删除完成之后再次执行修改引擎语句,由于表中数据实在太多,表数据量太大
数据库报错
ERR