最喜欢的性能调整技巧[关闭]

2024-01-12

当您有需要性能调整的查询或存储过程时,您首先尝试的是什么?


这是我总是向向我询问优化问题的人提供的方便实用的清单。
我们主要使用 Sybase,但大多数建议都适用。

例如,SQL Server 附带了许多性能监控/调整位,但如果您没有类似的东西(也许即使您有),那么我会考虑以下...

99%的问题我见过是由放引起的连接中的表太多。解决此问题的方法是执行一半的联接(使用某些表)并将结果缓存在临时表中。然后在该临时表上执行其余的查询连接。

查询优化清单

  • Run UPDATE STATISTICS on the underlying tables
    • 许多系统将其作为每周计划的作业运行
  • Delete records from underlying tables (possibly archive the deleted records)
    • 考虑每天或每周自动执行一次此操作。
  • 重建索引
  • 重建表(bcp 数据输出/输入)
  • 转储/重新加载数据库(剧烈,但可能会修复损坏)
  • 建立新的、更合适的索引
  • 运行 DBCC 查看数据库是否可能损坏
  • Locks / Deadlocks
    • Ensure no other processes running in database
      • 尤其是DBCC
    • 您使用的是行级锁定还是页级锁定?
    • 在开始查询之前以独占方式锁定表
    • 检查所有进程是否以相同的顺序访问表
  • Are indices being used appropriately?
    • 仅当两个表达式的数据类型完全相同时,联接才会使用索引
    • 仅当索引上的第一个字段在查询中匹配时才会使用索引
    • Are clustered indices used where appropriate?
      • 范围数据
      • value1 和 value2 之间的 WHERE 字段
  • Small Joins are Nice Joins
    • 默认情况下,优化器一次只会考虑表 4。
    • 这意味着在连接超过 4 个表时,它很有可能选择非最佳查询计划
  • Break up the Join
    • 可以解除连接吗?
    • 将外键预选到临时表中
    • 执行一半的连接并将结果放入临时表中
  • Are you using the right kind of temporary table?
    • #temp表的性能可能比@table大量变量(数千行)。
  • Maintain Summary Tables
    • 在基础表上使用触发器进行构建
    • 每天/每小时/等等构建。
    • 构建临时的
    • 增量构建或拆卸/重建
  • 使用 SET SHOWPLAN ON 查看查询计划是什么
  • 使用 SET STATISTICS IO ON 查看实际发生的情况
  • 使用编译指示强制建立索引:(index: myindex)
  • 使用 SET FORCEPLAN ON 强制表顺序
  • Parameter Sniffing:
    • 将存储过程分成 2 个
    • 从 proc1 调用 proc2
    • 如果 @parameter 已被 proc1 更改,则允许优化器在 proc2 中选择索引
  • 你能改进你的硬件吗?
  • 你几点跑步?还有更安静的时候吗?
  • Replication Server(或其他不间断进程)是否正在运行?可以暂停一下吗?运行它例如。每小时?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最喜欢的性能调整技巧[关闭] 的相关文章

  • 如何使用 DateTime 执行 SQL NOT NULL?

    一个人如何处理DateTime with a NOT NULL 我想做这样的事情 SELECT FROM someTable WHERE thisDateTime IS NOT NULL But how 嗯 它有效吗 我刚刚测试过 Obje
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 如何在Oracle中使用Timestamp_to_scn和Scn_to_timestamp?

    我的查询结果是这样的 select cast to date a start time mm dd yyyy hh mi ss pm as timestamp date of call ora rowscn from calling tab
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • 如何让 LinqToSql 将“索引提示”传递给 sql server?

    由于我们不能相信我们的客户会更新 sql server 中的索引统计信息等 因此我们过去不得不使用索引提示 http www sql server performance com tips hints general p1 aspx 由于我
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 如何使用PostGIS将多边形数据转换为线段

    我在 PostgreSQL PostGIS 中有一个多边形数据表 现在我需要将此多边形数据转换为其相应的线段 谁能告诉我如何使用 PostGIS 查询进行转换 提前致谢 一般来说 将多边形转换为线可能并不简单 因为没有一对一的映射 http
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • Flutter:如何修复“RenderFlex 像素溢出”错误?

    我在用GridView in my Flutter应用程序显示图像及其标题 请检查下面的代码 import package flutter material dart import common ui search bar dart cla
  • Windows 10 IoT 核心版 - 视频打开关闭

    我一直在运行 Windows 10 IoT Core 的 Raspberry Pi 2 中开展项目 打开视频时项目主题传感器触发 但我收到以下错误 ProjeVol1 exe 中发生 System Exception 类型的异常 但 未在用
  • 实体数据模型向导中没有 Oracle 数据源

    我正在使用 ODP NET 我需要从我的数据库生成 ORM 我已经安装了 Visual Studio 2010 旗舰版 ODAC1120250Beta EntityFramework x64 zip 在 Server Explorer 中
  • 带有使用多个值的生成器表达式的 CMake set_property 命令

    我正在使用 CMake v3 13 4Visual Studio 2017 Win64生成器 我需要修改 Visual Studio Librarian 对于 CMake 对象库 的命令行选项 为了实现 CMake 提供的目标属性STATI
  • 无论必填字段中的空值如何,ModelState 始终被视为有效

    我去过 https stackoverflow com questions 24240834 model validation why modelstate isvalid always returns true even when no
  • 如何防止 git 提交两个名称仅大小写不同的文件?

    我们在混合环境中进行开发 有些人在 Mac 上工作 有些人在 Linux 上工作 事实证明 这有时是一个挑战 因为那些在 Linux 上工作的人习惯于让他们的文件系统区分大小写 因此提交 意外或其他方式 仅大小写不同的多个文件是没有问题的
  • 如何在 PHP 中合并两个 JSON 字符串?

    我有两个像这样的 JSON 字符串 json1 src 1 order 2 src 10 order 20 and json2 src 4 order 5 src 6 order 7 我正在尝试用它来合并它们 images array me
  • 警告:“尝试更改冻结标题”

    我们的网站 www seeing org 最近更改了其标题 我们还决定增加其 Facebook 集成 包括利用以下对象属性og title 但是 在调试页面时 我收到以下警告 应修复的开放图警告 尝试冻结标题 改变 看来您正在尝试更改属性
  • 如何防止恶意使用我的套接字?

    我正在制作一个基于玩家能够邀请其他玩家参加聚会的网页 以及其他需要等待的事情 我有你们队伍中聊天 用户的基本发送 接收 更新 唯一的问题是 如何阻止某人坐在那里打开开发者控制台并继续 socket emit updateUsers Wein
  • Python 3.2 空闲与终端

    在 OSX 下的 python 3 2 中 如果我在 Idle 下运行 type sys stdin 我会得到一个奇怪的答案 如下所示 gt gt gt type sys stdin
  • 从 AVPlayer 中当前播放的视频中录制流音频

    很多类似的问题 但并不完全相同 我目前的代码设置是通过 AVPlayer 播放视频 我想要做的是以某种方式提取流视频的音频并最终与麦克风输入合并 使用 AVAudioMixer 想想卡拉 OK 应用程序 因此当用户播放录音时 它将仅播放视频
  • Express js 中允许多个 CORS 域

    如何以简化的方式允许 Express 中的 CORS 多个域 I have cors origin www one com app all function req res next res header Access Control Al
  • 如何释放 WebAssembly 中公开的 Rust 代码分配的内存?

    我有一个用 Rust 和 wasm bindgen 编写的 Web 应用程序 需要存储状态 状态存储如下 lazy static static ref ID TO DATA Mutex
  • UICollectionView PerformBatchUpdates:动画所有部分

    我正在写一个自定义UICollectionViewFlowLayout我注意到initialLayoutAttributesForAppearingItemAtIndexPath and initialLayoutAttributesFor
  • 变得致命:肮脏的存储库:有未提交的更改。使用 git ftp push 退出管道

    我有一个管道设置 可以自动处理 构建 CSS 文件 有时我在执行时会遇到此错误git ftp push 致命 肮脏的存储库 有未提交的更改 正在退出 bitbucket pipelines yml image php 7 2 7 pipel
  • 如何从 webviewclient 打开拨号器活动?

    我正在使用 webviewclient 打开 html 页面 html 页面有一个锚标记 当我单击锚标记时 应该启动我的电话拨号器活动 当我在外部浏览器 android 默认浏览器 中单击此锚标记时 它正在启动电话拨号器 但因为我正在使用
  • 在标题中使用 WordPress 短代码

    我有一些短代码可以在 WordPress 帖子或页面中正常工作 我可以在functions php中添加什么东西来使短代码能够在WordPress帖子标题中工作吗 您可以尝试在标题中添加过滤器functions php文件如 add fil
  • Control.Select() 和 Control.Focus() 有什么区别?

    在 WinForms 中 要将焦点设置到特定控件 我似乎总是最终调用Control Select and Control Focus 让它发挥作用 有什么区别 这是正确的方法吗 Focus 是实际设置焦点的低级函数 Select 是一个更高
  • 更新 Snowflake 中的混合嵌套对象

    我有一个雪花表 其中有一个变体列 raw 该表中的每一行都是复杂的 字典和数组 并且是嵌套的 多个层次结构 我想做的是能够更新specific某个数组中的项目 使用示例会更容易理解它 因此将其视为表中的一行 id 1234 x id y i
  • 最喜欢的性能调整技巧[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi