首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sql通配符:性能开销?

Sql通配符:性能开销?
EN

Stack Overflow用户
提问于 2009-12-09 00:07:13
回答 5查看 2K关注 0票数 3

我在谷歌上搜索了这个问题,似乎找不到一致的观点,也找不到许多基于可靠数据的观点。我只是想知道在SQL SELECT语句中使用通配符是否比单独调用每一项产生额外的开销。我在几个不同的测试查询中比较了两者的执行计划,看起来估计总是相同的。是否有可能在其他地方产生一些开销,或者它们是否真的以相同的方式处理?

我具体指的是:

代码语言:javascript
运行
复制
SELECT *

代码语言:javascript
运行
复制
SELECT item1, item2, etc.
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-09 00:18:28

代码语言:javascript
运行
复制
SELECT * FROM...

代码语言:javascript
运行
复制
SELECT every, column, list, ... FROM...

将执行相同的操作,因为两者都是未优化的扫描

区别在于:

当表模式changes

  • inability创建覆盖索引时,
  • 在sys.columns中的额外查找来解决*
  • 合同/签名的变化。实际上,根本没有调优选项,如果非schemabound
  • can未使用*
  • ...and other stuff

索引或模式绑定视图,则

  • 必须刷新所需视图

关于同一主题的其他SO问题...

票数 9
EN

Stack Overflow用户

发布于 2009-12-09 00:18:18

你是说用select col1, col2, col3 from ...代替select * from ...吗?

我认为命名列并检索最少量的信息总是更好的方法,因为

  • 您的代码将独立于数据库中列的物理顺序工作。列顺序应该不会影响您的应用程序,但如果您使用*,就会受到影响。在数据库迁移等情况下,这可能是危险的。
  • 如果您命名列,数据库管理系统可以进一步优化执行。例如,如果有一个索引包含您感兴趣的所有数据,则根本不会访问该表。

如果你用“通配符”指的是其他东西,那就忽略我的回答...

票数 2
EN

Stack Overflow用户

发布于 2009-12-09 00:16:47

编辑:如果你谈论的是星号通配符,就像在Select * From ...中一样,那么可以看看其他回复……

如果您正在讨论谓词子句中的通配符,或者使用Like运算符、(_ , % )的其他查询表达式,如下所述:

这与使用通配符是否会影响SQL是否可"SARG-ABLE“有关。SARGABLE,( search -ARGument-able)表示查询的搜索或排序参数是否可以用作现有索引的条目参数。如果在参数的开头加上通配符

代码语言:javascript
运行
复制
 Where Name Like '%ing'

那么就没有办法遍历name字段上的索引来找到在‘’中以ing结尾的节点。

如果您将通配符附加到末尾,

代码语言:javascript
运行
复制
Where Name like 'Donald%' 

然后,优化器仍然可以在name列上使用索引,并且查询仍然是SARG-able的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1867946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档