1,什么样的表可以称为大表
1)记录行数巨大,单表超过千万行
2)表数据文件巨大,表数据文件超过10G
2大表对查询的影响
1) 慢查询:很难在一定的时间内过滤出所需的数据
3) 在上亿条记录 筛选一部分数据,来源少,区分度低,产生大量磁盘io,降低磁盘效率

3 大表 对 DDL 操作的影响
1)建立索引需要很长的时间
风险
mysql 版本 < 5.5 建立索引会锁表
mysql 版本 >= 5.5 虽然不会锁表 但会引起主从延迟

    2)  修改表结构需要长时间锁表
     风险
     会造成长时间主从延迟
     假设我们在一张表,在主库上修改需要一百八十秒的时间来完成一个表结构的修改,那么在从服务器上同样至少也要一百八十秒来完成这个修改,因为现在mysql 主从复制都是使用单线程的,所以一旦有大表的修改在从服务器上没有完成相关修改操作之前,其他所有数据库修改操作都会无法进行,这样就造成了至少一百八十秒以上主从延迟,虽然 mysql 5.6 版本中支持了多线程复制 ,也会有一定限制 后面再讲。

3)对这个表的其他所有操作都会被阻塞
如何解决大表修改表结构的问题 ?
1) 分库分表把一张大表分成多个小表 (只是传说中,很少有公司这么做)
难点
1.分表主键的选择
2.分表后跨分区数据的查询和统计 , (查询时不得不把分开的表合并到一台服务器上)
2)大表的历史数据归档 如 对订单表 进行历史数据归档
好处是尽量对前后端业务的影响
难点
1.归档时间点选择 (要归档的数据应该是不会被使用,或者很少被使用)如订单表 归档一年前的数据合适,如果是日志类的数据 归档一周前的的数据
2.如何进行归档操作 已归档的数据要从现有表中删除,注意的是一下子删除几十万或者上百万的数据要讲究方式了,不然轻则造成主从延迟,重则产生大量阻塞,从而影响业务,对于如何对大表增删改查 我们将在下面讲解