作者回复: 👍 非常好
作者回复: 好问题。
在InnoDB引擎打开文件超过 innodb_open_files这个值的时候,就会关掉一些之前打开的文件。
其实我们文章中 ,InnoDB分区表使用了本地分区策略以后,即使分区个数大于open_files_limit ,打开InnoDB分区表也不会报“打开文件过多”这个错误,就是innodb_open_files这个参数发挥的作用。
作者回复: 第一次访问的时候,要打开所有分区的
作者回复: 仅仅看性能,是没什么差别的
但是建议尽量不要加after column_name,
也就是说尽量加到最后一列。
因为其实没差别,但是加在最后有以下两个好处:
1. 开始有一些分支支持快速加列,就是说如果你加在最后一列,是瞬间就能完成,而加了after column_name,就用不上这些优化(以后潜在的好处)
2. 我们在前面的文章有提到过,如果怕对线上业务造成影响,有时候是通过“先做备库、切换、再做备库”这种方式来执行ddl的,那么使用after column_name的时候用不上这种方式。
实际上列的数据是不应该有影响的,还是要形成好习惯😆
作者回复: 对这篇文章讲的是单机上的单表多分区
作者回复: 赞两次 😆
这个就是我们文章说的“分库分表中间件”
不过看到不少公司都会要在这基础上做点定制化
作者回复: 👍
作者回复: 1. 对,binlog对原因
2. 如果延迟算损失,确实是有损的。备库上的读流量要先切换到主库(也就是为什么需要在低峰期做做个操作)
作者回复: 用view可能可以实现部分你的需求,但是强烈不建议这么做。
业务不想修改,就好好跟他们说,毕竟这样分(常查和不常查的垂直拆分)是合理的,对读写性能都有明显的提升的。
作者回复: 分区表的用法跟普通表,在sql语句上是相同的。
作者回复: 20、21两篇看下
作者回复: update的话,主要应该第一次执行的时候,数据都读入到了
作者回复: 应该统一成innodb
网上商城购物类型更要用InnoDB,因为MyISAM并不是crash-safe的。
测试环境改完回归下
作者回复: 1. 我们语句里面是 where ftime='2017-5-1' 哈,不是“4-1”
2. “分区表的查询性能还是要比不分区好,这样理解对吗”,其实还是要看表的索引情况。
当然一定存在一个数量级N,把这N行分到10个分区表,比把这N行放到一个大表里面,效率高
作者回复: “本地分区规则应该是只打开单个引擎文件”,并不是哈,我在文章末尾说了,也会打开所有文件的,只是说本地分区规则有优化,比如如果文件数过多,就会淘汰之前打开的文件句柄(暂时关掉)。
所以分区太多,还是会有影响的
作者回复: 要加 不过因为时间很短,可以认为是安全操作