lolizeppelin
2019-09-03 21:08:07 +08:00
2 和 3 的核心问题是一样的
查询过程无外乎
数据库 应用层
从硬盘读取数据——数据库解析数据——复制到网路层 ~~~~~~~~ 网络层复制到应用程序——应用程序解析
数据库开销
硬盘读取开销~解析开销~复制 /传输开销
应用层开销
解析开销~传输开销
这些省不了的开销,无非是放在哪里而已
用数据库解析, 数据库 cpu 消耗大,但是传输开销小
应用解析,数据库 cpu 小,应用服务器 cpu 开销大,传输开销大
但是数据量大起来以后,传输开销自然就不能忽视了
如果 group by/join 前的数据远远大于处理后,思考两点
1.应用层来 group/join,数据库计算量的虽然降低,但是好处是否会被大量传输抵消?
2.一定量级上数据库层的 group/join 的否效率是否远远好于应用层?
3.上述一定量级是如何判断?
4.数据库层的 group/join 是否能降低硬盘 IO ?
5.应用层 group/join 事务问题怎么解决
-------------------------------------------------------------------------------------
1.其他数据库要用函数索引,也需要索引函数对象,例如 index(int(column))
2.mysql 不能多核并行查询,这个是死穴,当然少量数据肯定比你自己做强多了
3.mysql 没有 hash join 和 merge join 稍微大的数据 join 起来肯定要死翘翘,但是少量数据又有索引肯定比应用层做好得多.
至于到底多少数据量算大这个嘛............
4.分表是下策,mysql 的表分区也是个残疾...上策嘛....换数据库!!
所以说!!早点换 PG,压根就不纠结这些问题...真要纠结这些问题的时候,就是你换大数据的时候!!
PG 一统江湖!