AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 17893
Accepted
buckley
buckley
Asked: 2012-05-16 03:40:08 +0800 CST2012-05-16 03:40:08 +0800 CST 2012-05-16 03:40:08 +0800 CST

是否可以为优化器提供更多或所有需要的时间?

  • 772

鉴于优化器不能花费它需要的所有时间(它必须最小化执行时间并且不为它做出贡献)来探索所有可能的执行计划,它有时会被切断。

我想知道这是否可以被覆盖,以便您可以在需要时一直给优化器(或一定的毫秒数)。

我不需要这个(atm),但我可以想象一个复杂的查询在一个紧密的循环中执行的场景,你想提出最佳计划并事先缓存它。

当然,如果你有一个紧密的循环,你应该重写查询,让它消失,但请耐心等待。

这更多是出于好奇,也是为了看看短路优化和完整优化之间是否有时存在差异。

事实证明,您可以使用跟踪标志 2301 为优化器提供更多时间。这并不是我所要求的,但它已经接近了。

我在这方面找到的最佳信息是Ian Jose的 SQL Server 2005 SP1 中的查询处理器建模扩展。

小心使用此跟踪标志!但是在提出更好的计划时它会很有用。也可以看看:

  • Grant Fritchey标记为“优化级别”的文章。
  • 在升级到 SQL Server 2008 之前……作者 Brent Ozar。
  • Microsoft 支持在高性能工作负载中运行时为 SQL Server 调整选项。

我正在考虑具有大量连接的查询,其中连接顺序的解决方案空间呈指数增长。SQL Server 使用的启发式方法非常好,但我想知道如果优化器有更多时间(在几秒甚至几分钟的范围内),它是否会提出不同的顺序。

sql-server optimization
  • 2 2 个回答
  • 2837 Views

2 个回答

  • Voted
  1. Best Answer
    ENOTTY
    2013-01-01T22:55:55+08:002013-01-01T22:55:55+08:00

    在跟踪标志 2301 旁边,有 8780 确实使优化器“更努力地工作”,因为它只是给了它更多的时间(不是无限的,如这里详细描述的(俄语)和不太详细的这里)来做它的事情。

    俄语文章原作者的英文详细描述。其中包括作者自己的警告:

    不建议在生产中使用它。

    将两者结合起来并应用它们(通过查询提示 OPTION (QUERYTRACEON 2301, QUERYTRACEON 8780) 非常有选择地应用于 4 级嵌套内联 TVF 的查询(其中只有底部的那个会做任何实际工作,而上层会关联结果)通过 EXISTS 子查询)产生了一个不错的 MERGE JOIN 和几个 LAZY SPOOL,它们将执行时间减少了一半。

    • 20
  2. gbn
    2012-05-16T03:58:49+08:002012-05-16T03:58:49+08:00

    不,你不能。

    您可以通过了解它的工作原理来使您的查询“对优化器友好”(复杂的野兽,没有必要完全了解它)。我建议如果您对时间如此紧迫,请修复查询而不是更改 SQL Server 的操作方式。

    例如,您想知道随着数据量 + 数据分布的变化,查询何时开始扩展效率低于 O(n):给优化器更多时间在这里没有任何价值。

    • 4

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve