麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
636
2023-05-10
用Select * 进行SQL查询的七宗罪
首先,我们经常面对的客观情况是:在***数据库中,许多SQL开发人员都是从接触“SELECT * from EMP”(EMP为表的名称)之类的查询语句,开始学习SQL语言的。因此,除非能够给出充分的理由,否则我们很难撼动他们使用此类便捷查询语句的习惯。
下面,我将根据自己在应用编程中的实际经验,向大家证明使用Select * from table进行SQL查询的“七宗罪”。
1. 不必要的I/O(输入/输出)
通过使用SELECT * ,您虽然可以获得一些完全可以被忽略的返回数据,但是该获取过程可并不是免费的。那些本来可能只需要从索引页面中读取的数据检索,如今您却不得不从各个页面中以全量的方式读取出来。显然,此举会导致数据库端白白浪费各种有限的I/O周期。
2. 增加的网络流量
3.更多的应用内存
4.产生依赖于列排序的结果集(ResultSet)
当您在应用程序中使用SELECT * 查询后,您会得到一些依赖于数据表的列排序的结果集。因此,一旦有新的列被添加,或者是列排序被修改了,它们都会对查询的结果集产生不同的影响。
5.新增列会破坏既有的视图
6. 连接查询中的冲突
虽说在直接查询中,出现问题的可能性不大,但是当您试着按其中的某一列进行排序、或是在公用表表达式(Common Table Expression,CTE)、以及派生表(derived table)中使用查询的时候,您就需要进行各种进一步的调整,以避免产生冲突了。
7.在表间复制数据时的风险
您可能会经常使用“SELECT * into INSERT . . .”之类的语句,以实现将某些数据从一张表复制到另一张表。如果在两张表中,各个列的排列顺序略有不同,那么就可能会出现将不正确的数据复制到错误列中的情况。
结论
通过上述七点分析,相信您应该明白了为什么不能在SQL查询中滥用SELECT * 的原因吧?可见,您应该尽可能地在查询中,使用显式的列名称,而不是那些星号通配符。此举不但能够提高您的代码效率,也可以使您的程序更加清晰。与此同时,该方法还能够帮助您创建各种具有可维护性的代码。而且,如果后期在表中有新的一列被添加的话,您的代码也不会因此受到影响,您仍然会拥有来自原始数据表的参考视图。
原文标题:7 Reasons Why Using SELECT * FROM TABLE in SQL Query Is a Bad Idea,作者:Javin Paul
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。