gpt4 book ai didi

sql - 属性越少的 SQL 查询成本是否越低?

转载 作者:行者123 更新时间:2023-12-02 18:49:20 25 4
gpt4 key购买 nike

我的问题很简单 - 具有较少属性的 SQL 查询成本是否会较低?

示例:假设我们的 users 表有 10 列,例如 userIdnamephoneemail,...

SELECT name, phone FROM users WHERE userId='id'

比这个便宜

SELECT * FROM users WHERE userId='id'

从资源利用的角度来看是这样吗?

最佳答案

这取决于。

限制投影中的列数当然有可能提高性能,但这取决于可用的索引。如果我们假设 userId 是主键或至少是一个索引列,那么您会期望数据库的优化器通过使用具有 的索引进行查找来确定要获取的行>userId 作为前导列。

如果(user_id,phone)上有索引,或者phone是索引中包含的列(如果您的数据库支持该概念),则数据库可以获得phone 来自用于查找要返回的行的索引。这样,数据库就不必访问实际的表来获取电话。拥有数据库处理查询所需的所有信息而无需访问表的索引称为“覆盖索引”。粗略地说,在索引中搜索要返回的行的成本可能与访问表以获取用于投影的其他列的成本大致相同。如果可以限制投影中的列数以便使用覆盖索引,则可能会显着降低查询成本。更重要的是,如果由于 Oracle 中的链接行或外联 LOB 列、PostgreSQL 中的 TOAST 数据类型等而访问表以获取每一列涉及执行多次读取,则更重要。

减少投影中的列数还将减少需要通过网络发送的数据量以及客户端处理该数据所需的内存量。当您拥有较大的字段时,这一点往往最为重要。例如,如果 users 表中的一列恰好是用户记录的 LDAP 路径,那么其长度很容易就会达到数百个字符,并且占用了一半的网络带宽和一半的网络带宽。中间层使用的内存。如果您正在构建需要为数百个用户提供服务的流量相对较低的内部业务应用程序,那么这些事情可能并不重要。如果您正在构建需要为数百万用户提供服务的大容量 SaaS 应用程序,这可能非常重要。

关于sql - 属性越少的 SQL 查询成本是否越低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66997071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com