选择 * 与选择列

2024-02-09

如果我只需要 2/3 列并且我查询SELECT *与在选择查询中提供这些列不同,更多/更少 I/O 或内存是否会导致性能下降?

如果我在不需要的情况下选择 * ,则可能会出现网络开销。

但是在选择操作中,数据库引擎是否总是从磁盘中提取原子元组,或者只提取选择操作中请求的那些列?

如果它总是拉取一个元组,那么 I/O 开销是相同的。

同时,如果拉取元组,则从元组中剥离请求的列可能会消耗内存。

所以如果是这样的话,select someColumn 会比 select * 有更多的内存开销


有几个原因你不应该(永远)使用SELECT *在生产代码中:

  • 由于您没有向数据库提供任何关于您想要的内容的提示,因此它首先需要检查表的定义以确定该表上的列。该查找将花费一些时间 - 在单个查询中花费的时间不多 - 但随着时间的推移它会增加

  • 如果您只需要 2/3 的列,那么您选择的数据过多,需要从磁盘检索并通过网络发送 1/3

  • 如果您开始依赖数据的某些方面,例如返回的列的顺序,一旦重新组织表并添加新列(或删除现有列),您可能会得到一个令人讨厌的惊喜

  • 在 SQL Server 中(不确定其他数据库),如果您需要列的子集,那么非聚集索引总是有可能覆盖该请求(包含所需的所有列)。与一个SELECT *,你从一开始就放弃了这种可能性。在这种特殊情况下,将从索引页检索数据(如果索引页包含所有必需的列),从而从磁盘 I/O 中检索数据and与执行操作相比,内存开销会少得多SELECT *.... query.

是的,最初需要更多的输入(例如SQL提示 http://www.red-gate.com/products/SQL_Prompt/index.htmfor SQL Server 甚至会在这方面为您提供帮助) - 但这实际上是一种没有任何例外的规则:永远不要在生产代码中使用 SELECT * 。EVER.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择 * 与选择列 的相关文章

  • 将 .MDF SQL Server 数据库与 ASP.NET 结合使用与使用 SQL Server

    我目前正在 ASP NET MVC 中编写一个网站 我的数据库 其中还没有任何数据 只有正确的表 使用 SQL Server 2008 我已将其安装在我的开发计算机上 我使用服务器资源管理器从应用程序连接到数据库 然后使用 LINQ to
  • Linq To SQL - 拥有和分组依据

    我下面这个查询工作正常 不过我想使用 Linq 来实现它 select u ID u NAME from Task t join BuildingUser bu ON bu ID BUILDING t ID BUILDING join Us
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • SQL Server 2008R2 和创建 XML 文档

    论坛上的第一篇文章 因为我真的被这个问题困住了 以下查询正确地将有效的 XML 文档分配给 xTempXML 变量 类型为 xml 注 文档的长度 转换为varchar max 711 select xTempXML select Pres
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • st_intersects 与 st_overlaps

    这两个查询有什么区别 select a gid sum length b the geom from polygons as a roads as b where st intersects a the geom b the geom gr
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 内置函数将每个单词的第一个字母大写

    如果 SQL Server 中已存在此类函数 我不想为此创建自定义函数 输入字符串 This is my string to convert预期输出 This Is My String To Convert SET ANSI NULLS O
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • 到 ToList() 还是不到 ToList()?

    给定一个在记忆中 不是 LINQ to SQL 类列表 List
  • 解析带下划线的 SQL Server 数字文字

    我想知道它为什么有效以及为什么它不返回错误 SELECT 2015 11 Result 11 2015 第二种情况 SELECT 2 1 a a 2 1 检查元数据 SELECT name system type name FROM sys
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装

随机推荐

  • 使用准备好的语句批量更新在Java中批量插入

    我正在尝试用大约 50 000 行 10 列填充 Java 中的结果集 然后使用将它们插入到另一个表中batchExecute的方法PreparedStatement 为了使该过程更快 我做了一些研究 发现在将数据读入 resultSet
  • 是否可以在 ODataController 中返回不同的模型?

    在 OData v4 控制器中 是否可以返回不同的模型Get 和Get FromIDataUri key 我喜欢使用 ViewModel 当使用Get 我想返回一个方法xxxOverviewViewModel 当使用Get FromIDat
  • Angular 2 中异步可观察对象和管道上的安全导航运算符

    在异步加载的可观察对象上使用安全导航运算符时 我遇到了将空值 而不是讲座数组 传递到管道的问题 div class list group item 讲座类型 pipe ts import Pipe PipeTransform from an
  • 如何让 JSON 不那么冗长?

    我目前正在开发一个 Web 应用程序并使用 JSON 进行 ajax 请求和响应 我有一个区域 以包含超过 10000 个对象的数组的形式向客户端返回非常大的数据集 这是示例的一部分 已稍微简化 schedules codePractice
  • 用于在 OWA Outlook 中打开对话的 URL 结构

    我正在尝试链接到 Outlook Web 应用程序中的特定对话 因此 我们的想法是 用户单击链接 OWA 将打开并显示特定的电子邮件对话 前提是用户有权访问 In this https social msdn microsoft com F
  • 在 Codeigniter 中搜索数据 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 您能帮忙在 Codeigniter
  • Quartz CronExpression 获取所有表达式参数信息

    跟随我的上一个问题 https stackoverflow com questions 9699323 java quartz get all details from a scheduled job 9699495 comment1233
  • C# - 如何获取 oracle long 原始类型值

    如何使用 C 获取 long 原始类型值 由于你没有发布任何代码 我不知道你知道多少 我假设您已经了解如何使用 OracleDataReader 执行查询并返回结果集 LONG 和 LONG RAW 列有一个问题 您必须设置InitialL
  • 如何根据目标计算机(32 位或 64 位)有条件地使用 WiX 安装文件?

    我有一个包含 32 位版本和 64 位版本的文件 如果我在 32 位计算机上安装应用程序 我希望安装该文件的 32 位版本 同样 如果安装在 64 位计算机上运行 则应安装 64 位版本 如何检查使用 WiX 运行安装程序的机器类型 拜托
  • 为自定义组件创建样式的正确方法

    我在另一篇文章的末尾问过这个问题 但觉得这个话题需要一个自己的问题 如果我用自己的 style 创建了自己的组件 那么在不修改默认值的情况下将其与 Delphi 提供的定义样式合并的正确过程是什么 我可以将默认样式嵌入到我创建的组件中 并且
  • 反转 SVG 路径

    有没有简单的方法来反转 SVG 路径 我怎样才能让它从左上角开始 而不是从右下角开始
  • KeyCollection 作为 IEnumerable 会产生不一致的 LINQ 行为

    以下代码打印 false IEnumerable
  • 具有可移动和可旋转角色/物体/等的游戏中的 AABB

    我正在创建我的第一个 3D 游戏 但遇到了一些问题 我读到AABB https en wikipedia org wiki Minimum bounding box Axis aligned minimum bounding box相交以及
  • 正则表达式获取年份的最后两位数

    我必须使用正则表达式才能获取年份的最后两位数字 但前提是存在 4 位数字 我有以下正则表达式 当有 4 位数字时 它可以完美工作 示例 2014 14 2 然而 我需要这个只有在出现 4 位数字时才起作用 当只有 2 位数字存在时 我在清空
  • lupdate 和条件包含在 .pro 文件中

    我有一个包含条件包含的 pro 文件 如下所示 contains CONFIG embedded SOURCES a cpp HEADERS a h else SOURCES b cpp HEADERS b h 当我从终端运行 lupdat
  • 臭名昭著的 Apache 错误“父进程:子进程已退出,状态为 3221225477”

    我读过一些与臭名昭著的 Apache 错误相关的问题和回复 Apache error notice Parent child process exited with status 3221225477 Restarting 但到目前为止 没
  • EditorJS 总是呈现两个编辑器

    我正在尝试使用 EditorJS 的编辑器 一切工作正常 除了当我第一次加载页面时 它会在开始时初始化两个编辑器 并在每次重新加载页面时不断附加新编辑器 但它们都在里面 div div 分区我有什么遗漏的吗 react etc import
  • Webpack Uglify CSS 中的错误

    我强调要让 Uglify 与我的项目一起工作 以前我使用过 Uglify 并且没有出现问题 但现在我认为这与 SASS 相关 ERROR in css loader sass loader app scss global header sc
  • 替换表达式树中的类型

    我正在努力修改表达式树 我简化了示例 以便更容易在此处显示 让我们从两个类开始 public class Filter public string FilterableProperty1 get set public string Filt
  • 选择 * 与选择列

    如果我只需要 2 3 列并且我查询SELECT 与在选择查询中提供这些列不同 更多 更少 I O 或内存是否会导致性能下降 如果我在不需要的情况下选择 则可能会出现网络开销 但是在选择操作中 数据库引擎是否总是从磁盘中提取原子元组 或者只提