这些SQL看着就违法

最近在几个群里发现有些SQL实在是惨不忍睹。有的SQL 有40多个表连接,有的SQL是几十个UNION ALL。第一感觉这样的开发留着过年吗?

    其实对于这种现象有很多种可能。有些是框架干的。有些是被动为之(前人就这样堆的,也只能继续)。有些是因为设计不合理或者需求不合理造成的。也有些是因为不懂,所以无意识的干成这样的。

其实这些在国内非常普遍,哪个公司几乎都会遇到。没有这类问题的公司很少。有时候开发会说这个我们不能保证写出的SQL没有问题。(潜台词是可能会写出违法的SQL)。每当这时候我会想起一个故事(也有人说这个故事是假的):

在第二次世界大战期间,巴顿将军在一份军事报告中看到一段令人心痛的数据:很多前线的盟军战士牺牲,原因竟然是在跳伞时因伞包无法打开而摔死。对于一位重视人命,尽力保护部下生命的将军来说,这样的事实无异于一记重击。他不明白,如此重要的装备怎会出现如此严重的问题,不禁愤怒不已。

乔治·巴顿将军立刻来到了那家生产降落伞的工厂。他毫不客气地从生产线上抓起一个刚刚制造完成的降落伞包,砰的一声扔在了工厂的负责人脚下。他看着那个惊愕的负责人,冷冷地命令道,“你现在就用这个伞包从高空跳下。”负责人瞠目结舌,然而巴顿将军并没有结束。他继续说道,“以后,我会经常不定期抽取流水线上生产的伞包让你去跳。

”此言一出,整个工厂陷入了震惊和沉默。从那一天起,这个工厂的降落伞的质量发生了天翻地覆的变化。每一个零部件的检查,每一次装配的过程,每一次最后的成品测试,都严谨得像是在执行军事命令。因为他们知道,每一个不负责任的失误,都可能要求他们的负责人用自己的生命去付出代价。

这样的变化,很快就反映在了战场上。从那以后,前线作战的盟军战士们再也没有因为跳伞打不开伞包而牺牲的了。他们再也不需要担心这样荒谬的死亡,而可以将全部精力集中在抵抗敌人。

    不管故事是真的假的。反应了一个问题。很多时候由于不好好控制SQL质量,导致数据库分库分表。然后带来了巨大的成本。随便看看2-3个开发团队因为不同数据库的接口、一致性、实时性等问题加班甚至开会。而其实如果每个开发人员多花1分钟检查SQL的质量,使得SQL高效。那用一个数据库几乎都解决了加班的问题,甚至加班解决不了的问题也解决了。

     任何地方都会有反对声音。问怎么管理?其实看看马路上绝大多数人都是尊重交通法的。记住是《中华人民共和国道路交通安全法》,是2004年5月1日颁布的。(因为我做了12年的公安行业)。也就是说那个时间以后,不是违章,而是违法。犯法了。

    如果都有敬畏心,其实即使一个路口没有车,也会等着红的。不会因为没有车,也没有警察,也没有电子警察就闯红灯。有没有监督是一个样子。这里还有人会质问这个做得到吗?

    我问了几个新加坡的朋友,答:做得到。新加坡的驾驶员都遵守交通法规。没有闯红灯。同样是亚洲国家,往上数还都是华人。所以做不到应该找自己的问题。

   有一次有人说开发都写好了,要DBA干什么?的确,如果都写的好了SQL是不用优化了。不过这种可能性在几乎是0.  而且在设计不好的前提下,其实基本优化不动。所以DBA可以搞设计去。那么设计是怎么来的?结合需求,所以DBA可以去侵入业务需求。

   最后说,与其分库以后带来的各种问题。还不如好好设计好好写SQL。一个数据库几乎都能解决。早点下班,系统还稳定很多。而且减少了大量消息队列和中间件。成本还下降了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值