刚才,领导对我的 sql 提出了建议

2019-09-03 12:44:17 +08:00
 Breadykid

背景:

领导见状后,如是说:

对于第三点我有疑问。。。不是太认同,想问问大家的看法

10875 次点击
所在节点    MySQL
41 条回复
optional
2019-09-03 13:56:24 +08:00
看应用类型,对于高并发的互联网应用,2,3 都是 bad idea。
optional
2019-09-03 14:00:22 +08:00
嗯 为了避免被喷,加一个 具体情况具体分析。
knva
2019-09-03 14:02:36 +08:00
sql 压力越小越好
notshytoday
2019-09-03 14:05:25 +08:00
你不认同肯定有自己的原因的,说说呗

赞楼上的具体问题具体分析
Xbluer
2019-09-03 14:07:56 +08:00
1. oracle 中有所谓的函数索引,即针对列计算出函数的值在生成索引。mysql 好像可以使用虚列曲线救国。
airfling
2019-09-03 14:12:44 +08:00
我觉得单表查询优先于多表,单挑优先于 group by,groupby 可以不再数据库中做,完全可以自己需要的数据直接取出来,自己在内存中做。除非一次取的数据特别大,但是数据特别大这种情况你就要考虑分表了,建索引等优化措施了,而是不是 sql 优化就能解决的
LeeSeoung
2019-09-03 14:22:15 +08:00
1 涉及表字段设计,设计恰当很少出现查询字段需要转换后再查询的情况
2 是可以认同的,数据量大的情况下 请求大量数据回来,网络 IO 以及对内存都有要求
3 我看了网上一篇文章中讲到《高性能 mysql 》有提到这个问题,从缓存、锁竞争等方面来说,单表多次查是由于联表查的
4 完全同意
scys
2019-09-03 14:23:17 +08:00
* 听领导的,先按照领导的做一遍;
* 做完后发现没什么效果,研究下 2,3,看看哪里可以优化。

感觉这样工作才比较有效。
a719114136
2019-09-03 14:27:19 +08:00
做个实验就知道了,如果懒得做的话我告诉你,领导说的没错
reus
2019-09-03 14:33:38 +08:00
你看别的数据库就从来没有什么单表优于多表的说法
垃圾 mysql。
xaplux
2019-09-03 15:39:50 +08:00
很明显,不认同领导说的。但是这次你领导说的没什么问题,1 很明显,2 要看具体情况,如果是单表的 groupby 没有问题,3 JOIN 的多张表都比较大时,确实单表查询效率要高,4 没毛病
binux
2019-09-03 15:44:34 +08:00
3 看情况,如果 filter 字段都在表 1,join 表 2 取其他字段那是没问题的
Breadykid
2019-09-03 15:45:14 +08:00
@reus 同意,Postgres 就好很多
luozic
2019-09-03 15:47:36 +08:00
一切看数据量还有数据库服务器配置。
Breadykid
2019-09-03 15:53:33 +08:00
@knva 为什么领导说非多张大表连表查询的压力对于服务器来说微乎其微
Breadykid
2019-09-03 15:55:11 +08:00
@luozic
@binux
@xaplux
@a719114136
@LeeSeoung
@airfling
@optional

为什么领导说非多张大表 联表查询的压力对于数据库来说微乎其微???
LeeSeoung
2019-09-03 15:59:21 +08:00
不是大表你联查还是单表查都差不多。。个位数相同,小数点后几位你还在乎多少位么。。
Raymon111111
2019-09-03 16:21:32 +08:00
2. 尽可能把压力放在业务侧. 数据库资源很宝贵. 但是 groupby 涉及返回数据大小的问题, 所以还要具体问题具体分析.

3. 尽可能不做连表查询. 一个很重要的原因是连表的索引往往踩不对.
winglight2016
2019-09-03 16:49:35 +08:00
有索引的情况下,多表关联没有增加多少 payload。4000 多万可以开始准备分表了。报表不要用生产库来生成。
glacer
2019-09-03 16:56:59 +08:00
从来没有 MySQL 不能多表联查的道理,高性能的 join 查询本身就是关系型数据库的一大优势。在一些规范中限制连表的数量是因为程序员的水平参差不齐容易写出慢查询。
在索引命中合理的情况下,MySQL 对 Join 的处理性能是完全没有问题的,完爆将多表结果查出在内存中做聚合的做法。
如果在索引不合理使用的情况下,将多表拆成单表来查,照样和不能命中索引。难道就对数据库的压力就比联表查小了么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597480

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX