百科问答小站 logo
百科问答小站 font logo



为什么会有人写出几百行的SQL语句啊?这些人的心态是怎样的?为了凸显自己的强大吗? 第1页

  

user avatar   yu-zai-zhi-jian-40 网友的相关建议: 
      

作为一个以前经常要写300-900行SQL的人来说。这种SQL经常出现在需求变化快变化频繁的地方。而他之所以特别长和频繁的需求变化不无关系。

比如当领导要求你开发一个绩效排名功能的时候,他通常会先给你一个标准,然后你会按照这个标准写出一个逻辑来。这个时候可能是一个很简单的SQL 并排序。而当他看完之后,通常会发现这样那样的问题,诸如有相同排名啊,排名不合他的心意啊,于是提出新的标准。

需求发生了变化,你就要跟着变更业务代码,比如他要求在排序的时候考虑工作年限。于是你不得不在已经完成的SQL中连接新表,并在排序的时候加入一个字段。而通常这样的过程可不会只发生一次。

于是需求会再再再再再次发生变化,这个时候就会发现,标准可能会变成了先看加权总工作量,然后看加权难度系数,再然后看近五年累计工作量,再计算所在科室或者专业的平均绩效排名,最后在上述条件下再按照工作年限排个序

如果你来这个任务你会如何选择呢,如果是只修改存储过程的语句和前端展示的业务逻辑,而服务端代码完全不动,是不是更省事儿呢?而在我还在写这种SQL的时候,几乎每半年都会产生非常大的需求变化,甚至每次都要加入新表或者剔除旧表,甚至是加入之前剔除的表格。当时我都认为完全没有必要对代码进行重构,因为构了也白构,优化完了下次情况又不一样了。


user avatar   aspwebchh 网友的相关建议: 
      

SQL语句复杂好与不好不能一概而论,写复杂为了凸显自己强大也不见得,这个还得根据具体应用场景和技术流派分析。

现在的互联网应用很多已经不兴关系数据库那一套了,因为并发量大,操作缓存比较多,如直接读写redis或设置进程内存,SQL最多数据落盘的时候用下。有的应用甚至不用关系数据库而是用mongodb,那么连仅有的SQL都省下了。

现在很多年轻的程序员,开发互联网应用出生,对于关系数据库的使用仅限select、update、insert、delete,但是这并不妨碍他们拿高薪,因为程序本身用不上关系数据库的高级特性,对于公司来说,用不上的技术,员工掌握了意义也不大。

mySql应该算是关系数据库管理系统的下限了,就数据库技术的先进性和性能而言,不知道被oracle和sql server甩几条街,但是在互联网行业,照样很流行,因为互联网企业并不需要很多先进的关系数据库特性。

如果在mysql上运行复杂的sql,如嵌套的很深的子查询或者多表连接查询,性能肯定非常差劲。但是换成sql server和oracle就不一样了,这些商业数据库对复杂sql优化支持的很好,索引利用得当,性能会非常好。

此外,也不是所有的应用系统都是高并发的,有的系统可能只是一些内部系统,如OA,用的人不多,但是业务逻辑非常复杂,一个功能涉及到N个表的数据,这个时候复杂SQL就能显现威力了,一个SQL语句就能完成所有的业务逻辑需求,这对于深入掌握SQL的程序员而言,开发效率非常高,这也是有程序员喜欢用复杂SQL的原因,可能这个SQL执行需要一秒,但是对于一些内部系统而言,无所谓啦。

但是复杂的SQL有一个毛病,有门槛,如果一个不精通SQL的程序员去阅读一个复杂SQL,就跟看天书一样,完全看不懂,然后去谷歌百度一顿搜索,依旧看不懂。这和复杂的程序代码不一样,程序代码即使很复杂,只要花时间啃,总是能看明白的,而且也能改进优化。如让一个初级java程序员改一段复杂的业务逻辑实现代码,照样没问题。

然而,让一个对SQL了解仅限增删查改的程序员,去改一段复杂的SQL,就不行了,因为SQL编程本身就比用编程语言编程复杂,SQL语言中看似关键字不多,但是很多关键字都蕴含很多种变化。

如表连接,分out join 、inner join、cross join、full join,还分left join、right join,而且还可以互相组合,组合代码的结果还不一样,差之毫厘谬以千里。

如子查询,分相关子查询,不相关子查询, 不相关子查询还好理解,相关子查询要是没经过系统学习,肯定理解不了。

另外还有case when,pivot、unpivot 这种很有用,但是又不常用的东西,真的会要了没见过的人的命。

因此对SQL掌握不深的程序员见到这种SQL真的会骂娘,因为把他整不会了,而且通过搜索引擎还解决不了问题,必须经过系统的学习,因为SQL编程知识更像一个体系,而不是片段。

题主说的这个程序员估计是传统编程行业出生,而不是互联网行业出生,否则不是这个思维。当然,如果他是大数据库开发人员,也可能会写出这种SQL。

我以前做传统行业的系统,用的.net + sql server,真的很兴复杂SQL这一套解决问题的,同时还会用存储过程、SQL函数、触发器来解决问题,效率很高,开发也很轻松。

后来跑到互联网行业,想在公司应用这套机制,被所有人都喷了,那自然也就不用了。最近在互联网混的这几年,连普通SQL都不写,数据的存取不是redis就是mongodb,要不就是进程内存,复杂SQL怎么写都快忘记了。

最后推荐一本书,有兴趣可以去看看,《SQL Server 2005技术内幕:T-SQL查询》,豆瓣9.4

理解这本书的内容,对SQL的掌握会有翻天覆地的变化,而且是纯实践的,可以堪称神书。




  

相关话题

  如何理解关系型数据库的常见设计范式? 
  研究生研究数据库研究方向有前景吗?想写一个国产的数据库,类似mysql这种? 
  一直很热闹的数据库领域,有哪些事情让你感觉眼前一亮? 
  为什么很多公司都开始去 Oracle 而使用 MySQL? 
  为何没有国家建立全民DNA数据库 (真正意义上的全部人而非仅仅包括犯罪嫌疑人)? 
  为什么 mysql 要额外加入一个 utf8mb4 数据类型,而不是原地升级 utf8? 
  数据库预编译为何能防止SQL注入? 
  如何评价StarRocks开源? 
  假如有人把支付宝所有存储服务器炸了(物理炸),大众在支付宝里的钱是不是就都没有了呢? 
  如何评价天津大学因经费大幅度缩减而暂停订购大量论文数据库? 

前一个讨论
what works in ways you might not otherwise怎么翻译理解?
下一个讨论
普朗克长度是否在瓦解文明的意义?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利