问题

为什么公司不准使用SQL语句查询的「*」?

回答
很多公司在数据管理上,会选择禁用SQL语句中的 `SELECT `,这可不是一个随意的规定,背后其实藏着一些非常实际的考量,关乎到效率、安全、以及长期的维护成本。

首先,我们得明白 `SELECT ` 这条语句在做什么。它就像一个“全选”的按钮,告诉数据库:“把这张表里所有的列,所有的数据,都给我拿出来”。听起来很方便,但就像你去超市买东西,不是每次都需要推着购物车把所有货架上的东西都扫一遍,你只想要特定的几样。

性能上的“看不见的开销”

想象一下,一张表有几百个列,有些列里存的是大文本、图片或者二进制数据。当你在代码里写 `SELECT `,即使你后续只用了其中两三个列的数据,数据库也得把那几百个列的所有数据,无论大小,都从磁盘上读出来,经过网络传输到你的应用程序。这个过程就像是打包了一大堆你根本不需要的东西,然后再从中挑挑拣拣。

I/O 负担加重: 数据库的存储设备(硬盘、SSD)是有限的,频繁地读取大量不需要的数据,会增加 I/O 的压力,降低数据库整体的响应速度。
网络传输的瓶颈: 数据从数据库服务器传输到应用服务器,需要占用网络带宽。传输的数据量越大,占用的时间就越长,尤其是在网络不那么给力或者数据量非常大的时候,这种延迟会变得非常明显。
内存的浪费: 数据库在处理查询时,会占用内存空间来缓存数据和执行中间操作。如果 `SELECT ` 导致需要处理大量不必要的数据,也会增加内存的消耗,可能导致其他更重要的操作被挤出内存,进一步影响性能。

代码可读性与维护的“技术债”

从代码编写的角度来看,`SELECT ` 乍看之下简洁明了,但它隐藏了一个很大的隐患:耦合性过强。

脆弱的依赖: 如果你写了 `SELECT `,然后又在代码中依赖了某个特定列的值,当数据库表结构发生变化,比如某个列被删除、重命名或者新增了列,你的应用程序很可能就会因此崩溃。因为你代码里依赖的那个“名字”可能就不存在了,或者它的含义变了。
难以追踪依赖: 当你看到一段代码写着 `SELECT FROM users`,你很难直接知道这段代码真正关心的是 `users` 表里的哪些信息。如果日后需要优化这个查询,或者理解这部分业务逻辑,就需要去翻看代码的其他部分,找出所有使用 `users` 表数据的具体地方。这对于代码的理解和维护来说,是增加了很大的不确定性和工作量。
“隐藏”的新列: 如果数据库管理员在 `users` 表中新增了一个列,而你的代码还在使用 `SELECT `,那么你的应用程序就会莫名其妙地开始接收到这个新列的数据。如果这个新列的数据类型与你当前处理逻辑不匹配,或者你需要为它做额外的处理,就会导致意料之外的错误。

安全与隐私的“不必要暴露”

在很多企业环境中,数据库中存储着敏感信息,比如用户的身份证号、银行卡信息、密码(即使加密存储)、薪资等。

最小权限原则: 在安全设计中,一个核心原则是“最小权限原则”,即任何用户或应用程序只应该被授予完成其任务所必需的最小权限。`SELECT ` 违反了这个原则。它会默认读取所有列,这意味着即使你的应用程序只需要获取用户的姓名和邮箱,它也能获取到其他所有列的数据,包括那些它并不需要,甚至不应该知道的敏感信息。
数据泄露风险: 如果应用程序的代码存在安全漏洞,比如 SQL 注入,或者日志记录不当,那么 `SELECT ` 的行为就可能将数据库中大量的敏感数据一次性暴露出去,造成的后果是灾难性的。而如果明确指定了需要的列,即使发生漏洞,暴露的数据量也会大大减小。

最佳实践与演进

正是基于以上这些原因,业界普遍推崇的是明确指定你需要的列。比如,如果你只需要用户的姓名和邮箱,那么你的查询就应该是 `SELECT user_name, email FROM users`。

这样做的好处显而易见:

性能提升: 只读取和传输必需的数据,显著减轻数据库的 I/O 压力和网络传输负担。
代码健壮性: 使得代码对数据库 schema 变化具有更好的抵抗力,当数据库结构调整时,受影响范围更小,更容易管理。
可读性与可维护性: 代码意图更清晰,其他开发者可以快速理解查询的目的,便于后续的维护和优化。
安全性加强: 限制了数据访问的范围,减少了不必要的数据暴露,从而降低了安全风险。

所以,公司禁止使用 `SELECT `,并不是为了给开发者制造麻烦,而是为了保障系统的性能、数据的安全,以及整个团队在长期项目开发和维护中的效率。这是一种对数据管理负责任的态度,也是一种“防患于未然”的良好工程实践。

网友意见

user avatar

性能是次要原因,解耦是主要原因。

不过他方法不对,如果是我,会直接让这种查询报错,然后你就没这么多疑问了。

类似的话题

  • 回答
    很多公司在数据管理上,会选择禁用SQL语句中的 `SELECT `,这可不是一个随意的规定,背后其实藏着一些非常实际的考量,关乎到效率、安全、以及长期的维护成本。首先,我们得明白 `SELECT ` 这条语句在做什么。它就像一个“全选”的按钮,告诉数据库:“把这张表里所有的列,所有的数据,都给我拿出.............
  • 回答
    国内许多公司不使用jQuery等成熟开源JavaScript框架,而选择自研框架的原因是多方面的,涉及技术、业务、管理、安全等多维度的考量。以下从多个角度详细分析这一现象: 1. 定制化需求:业务场景的特殊性 业务逻辑复杂:部分企业(如金融、政务、制造业)的业务逻辑高度复杂,需要框架支持特定的.............
  • 回答
    关于Adobe在中国正版软件使用率不高的问题,这背后确实是一个复杂且多方面因素交织的现实。说Adobe公司“不管”,其实并不准确,他们一直在努力,只是效果不如预期,原因有很多,我们可以从几个层面来剖析:1. 价格因素:永远绕不开的痛 订阅制模式的冲击: Adobe从传统的买断制转向订阅制,这本身.............
  • 回答
    .......
  • 回答
    有些公司确实会对 C++ 标准模板库(STL)的使用有所限制,甚至在某些项目中完全禁止。这背后的原因并非一概而论,而是由多种因素交织而成,涉及到项目需求、团队能力、性能考量、安全性和维护性等方方面面。让我来为你详细剖析一下。 一、性能与资源控制的极致追求在一些对性能有着极其严苛要求的领域,比如嵌入式.............
  • 回答
    乔丹体育公司关于“判决不影响主要商标的使用”的回应,这是一个非常关键的声明,背后涉及了法律、商业策略以及品牌形象等多个层面。我们可以从以下几个方面来详细解读和分析:1. 事件背景:关键的“判决”是什么?首先,我们需要明确“判决”指的是什么。在中国,涉及到“乔丹”这个名字的法律纠纷,最主要也最广为人知.............
  • 回答
    在广袤的地球上,绝大多数国家都沐浴在公元纪年的光辉之下,将耶稣基督诞生之年作为时间的起点。然而,总有一些独特的存在,它们以自己特有的方式丈量着岁月的流逝,书写着历史的篇章。这些国家,就像一颗颗散落在时间长河中的璀璨明珠,闪烁着不同文明的光芒。泰国:佛教的脚步丈量时间在东南亚的佛教王国泰国,公元纪年虽.............
  • 回答
    中国内地的公司选择在香港或美国上市,而不是在A股(中国内地股市)上市,这背后有着复杂的原因,涉及市场成熟度、监管环境、融资便利性、投资者结构以及企业自身的战略考量等多个方面。要说清楚这一点,我们需要一层一层地剥开来。一、 A股市场的历史与局限性首先,我们得明白A股市场的发展历程。中国内地股市从改革开.............
  • 回答
    公司之所以对招聘没有经验的新人有所顾虑,原因确实不少,而且是多方面的。这背后并非单纯的不想给新人机会,而是出于对成本、效率和风险的考量。下面就来细致地聊聊这个问题,争取让你觉得这是个有血有肉的解释,而不是机器的冰冷分析。1. 时间成本是硬伤:这是最直接也最显而易见的原因。新人一来,就像一张白纸,什么.............
  • 回答
    这个问题触及了“同工不同酬”现象背后复杂的经济和社会原因,而非简单的成本计算。如果公司真的能以更低的成本获得同等的产出,那么理论上它们确实会倾向于这样做。但现实远比这复杂得多,原因如下:1. “同工不同酬”的复杂性,并非简单的劳动价值差异首先,我们得理清“同工不同酬”这个表述。它通常指的是在相同或相.............
  • 回答
    互联网公司“不欢迎”中年人,这并非一个绝对的、普适的现象,而是存在于部分互联网公司、部分岗位以及部分招聘和管理实践中的一种倾向。这种倾向背后,往往是多种复杂因素交织作用的结果。下面我将尽可能详细地阐述这些原因:一、 技术更新迭代快,学习能力和适应性被质疑 技术栈陈旧与新技术鸿沟: 互联网行业技术.............
  • 回答
    这是一个很有意思的问题,也是很多人都有的疑问。既然日系车以故障率低著称,为啥租车公司好像不太爱用它们呢?这背后其实不是一句简单的“故障率低”就能解释的。租车公司在选择车型时,考虑的是一整套的运营成本和用户体验,日系车在某些方面可能就没那么占便宜了。咱们细说说。1. 购置成本与品牌溢价:首先,日系车,.............
  • 回答
    公司高管不去创业,这是一个非常值得探讨的问题,因为他们往往具备创业所需的许多核心素质。但实际上,他们“不去”创业,或者说选择不去创业的原因是多方面的,而且往往是复杂的权衡结果。我们可以从以下几个角度来详细分析:一、 风险厌恶和对现有稳定性的追求 巨大的个人财务和声誉风险: 公司高管通常已经积累了.............
  • 回答
    这事儿说起来,咱们面试那会儿,经常会碰到这么一档子事儿,就是填那种厚厚一沓的个人信息表。你说怪不怪,里面有些信息,感觉跟这工作八竿子打不着,问得那叫一个细致。比如家庭情况、婚姻状况、甚至有没有兄弟姐妹,这些好像跟我的专业技能、工作经验也没啥直接关系吧?为啥公司就非要刨根问底呢?今天咱就来好好聊聊这背.............
  • 回答
    “为什么很多公司都不招大龄码农?” 这是一个非常普遍且复杂的问题,背后涉及多方面的考量,而不仅仅是年龄本身。以下将从多个角度详细阐述这个问题:一、 成本与性价比考量 薪资期望高: 大龄码农通常拥有更丰富的经验和更深的技能栈,因此他们的薪资期望也相对较高。在招聘时,企业会综合考虑岗位需求和预算,如.............
  • 回答
    很多公司在追求资本市场青睐时,会选择“借壳上市”而非直接IPO(首次公开募股)。这背后并非一时的潮流,而是企业根据自身情况、市场环境以及对上市路径的考量,权衡利弊后做出的策略性选择。要理解这一点,咱们得从几个关键点入手,深入聊聊其中的“门道”。首先,咱们得明白什么是“借壳上市”。简单来说,就是一家未.............
  • 回答
    您好!听到您在选择地暖方式时遇到了困惑,暖通公司普遍不推荐地暖模块,这背后确实有一些值得深入探讨的原因。我可以非常详细地给您讲讲,尽量让您明白其中的缘由。首先,我们得明确一下,您说的“地暖模块”指的是什么。我猜测您可能是在说一些预制好的、像拼图一样的地暖模块,或者是将地暖盘管集成在某个基材上的产品。.............
  • 回答
    中国大公司不热衷于开发 Linux 桌面应用的原因是多方面的,涉及技术、市场、商业模式、用户习惯以及生态系统等多个层面。以下我将尽量详细地阐述这些原因:一、市场份额与用户基础的劣势: Windows 主导地位: 这是最根本也是最重要的原因。在全球范围内,Windows 长期占据桌面操作系统的主导.............
  • 回答
    有些公司不鼓励内部员工谈恋爱,背后有着多方面的原因,这些原因往往涉及到效率、公平、规章制度、公司文化以及潜在的法律风险。下面我将详细阐述这些原因:一、 影响工作效率和专业性这是最常见也是最直接的原因。 注意力分散: 恋爱中的员工可能会因为情感的起伏、对伴侣的思念、或者频繁的沟通而分散对工作的注意.............
  • 回答
    IT行业,尤其是那些对技术深度和创新要求极高的公司,确实会更偏爱那些拥有扎实基础、能够独立解决问题、并且具备一定实战经验的求职者。这并不是说培训机构出来的就一定不行,而是说在招聘时,公司会更看重某些特质,而这些特质在很多情况下,似乎与传统的科班出身或者有项目经验的人更容易联系起来。首先,基础的扎实程.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有