问题标签 [sql-execution-plan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
506 浏览

sql - 重新启用外键约束后执行计划异常

我有一个奇怪的问题,在设置nocheck外部约束并重新启用它之后,

我得到了一个与nocheckon 一起使用的过时的执行计划。

为什么FKBtoA即使在使用以下语句再次添加检查后,SQL Server 仍会生成执行计划,就好像禁用了外部约束一样?


[UPDATE1]
到目前为止,删除外部约束并读取它是有效的。

但是对于非常大的桌子,这似乎有点过头了——有没有更好的方法?

[回答]

我必须添加WITH CHECK如下更改语句才能获得旧的执行计划


这是完整的 SQL 语句


这是每个SELECT语句的执行计划截图

在禁用外键约束之前
替代文字

禁用外键约束后
替代文字

重新启用外键约束后
替代文字

0 投票
6 回答
95443 浏览

sql - SQL Server 计划:索引扫描/索引查找之间的区别

在 SQL Server 执行计划中,索引扫描和索引搜索有什么区别

我在 SQL Server 2005 上。

0 投票
1 回答
1150 浏览

sql-server - 调试 T-SQL 脚本时的实时查询执行计划

我有 SQL Server 2008 和 SSMS 2008,我正在调试一个脚本。我可以毫无问题地单步执行脚本,但是如果我单击“包括实际执行计划”的工具栏按钮(在执行计划中添加附加结果选项卡的按钮),我将无法再进行调试。

相反,当我单击调试时,调试开始并立即再次停止,结果窗格显示我的线程已成功退出。

我应该将此作为错误提交,还是进行调试和执行计划查看本质上不会齐头并进(尽管我不确定他们为什么不这样做)?

0 投票
3 回答
961 浏览

sql-server - 如何阅读和学习 T_SQL 的执行计划?

如何阅读和学习 T_SQL 语句的执行计划?

0 投票
2 回答
531 浏览

oracle - 执行计划中的节点如何比其子节点具有更小的成本?

我一直认为执行计划中的节点只有在其子节点执行后才能执行,因此节点的总成本必须大于或等于子节点的成本。但是,情况并非总是如此,如下例所示:

读取第 6 行和第 7 行之间成本差异的正确方法是什么?

0 投票
1 回答
759 浏览

mysql - mysql是否使用我的索引,geokit的性能可以提高吗?

我在rails应用程序中使用geokit(acts_as_mappable),当有大量模型时,径向或边界搜索的性能会大大降低(我尝试过1-2百万,但问题无疑比这更早出现)。

Geokit 根据表中的 lat 和 lng 列(纬度和经度)进行所有计算。为了提高性能,geokit 通常会添加一个边界框“where”子句,目的是使用纬度和经度的组合索引来提高性能。然而,对于大量模型,它仍然非常慢,在我看来,边界框子句应该比它有更多的帮助。

所以我的问题是,有没有办法让 mysql 更好地利用组合的 lat/lng 索引或以其他方式提高 geokit sql 查询的性能?或者,可以使 lat/lng 的组合索引更有帮助吗?

编辑:我现在可以使用 Rails 并在此处更详细地编写解决方案

更多背景

例如,此查询查找给定点 10 英里范围内的所有地点。(我添加 .length 只是为了确定返回多少结果 - 在 geokit 中有更好的表达方式,但我想强制执行更典型的 SQL 查询)。

在 mac mini 上大约需要 14 秒。这是解释计划

因此,即使结果中的位置数为 1135(实际上边界框中的位置数仅为 1323),mysql 仍在检查 87554 行。

这些是索引上的统计信息(使用 rails migration add_index :places, [:lat, :lng]制作):

它似乎也与三角计算无关,因为对边界框执行类似的查询会导致查询更简单,但它的性能同样很差:

给出一个类似的解释计划:

0 投票
6 回答
7331 浏览

mysql - EXPLAIN SELECT 在其他数据库中

我发现EXPLAIN SELECT查询在 MySQL 中非常有用,因为它提供了有关如何执行 SQL 的信息,并提供了分析的机会,例如,在执行查询本身和分析统计数据之前,您应该添加缺失的索引以改善响应。

我的问题是:在 MS Sql、Firebird、Ingres 等数据库中,是否有类似的命令可用?

在 Firebird 中,我们有 PLAN,但它非常薄弱,因为很多时候必须运行很长的查询才能查看一个简单的错误。

此致,

毛罗·H·莱吉里

0 投票
2 回答
1053 浏览

sql - MySQL解释异常

考虑以下查询:

在我的笔记本电脑上,这不会返回任何结果。在我的服务器上使用完全相同的(转储)数据库,它确实会返回结果。

如果我在笔记本电脑上运行 EXPLAIN,我会得到这个

而在我的所有其他服务器上它都给出了这个(注意 ref 列中的差异)

如果我删除连接、子查询或最后一个分组依据,那么我会得到预期的结果。

我假设这是一个配置问题,但这不是我以前见过的问题。有谁知道这可能是什么原因?

我的笔记本电脑运行 OSX 10.6 和 MySQL 5.0.41。另一台运行 OSX 10.5.7 和 MySQL 5.0.37 的笔记本电脑运行良好,运行 MySQL 5.0.27 的 Linux 服务器也是如此。

谁能解释一个使用 ref=func 的解释计划和另一个使用 ref=odysseyB.CF.COMPANY_ID 的解释计划之间的区别?

谢谢。

0 投票
3 回答
20507 浏览

sql - 如何分析 Sqlite 查询执行?

我有一个 Sqlite 数据库,我想检查索引是否正确。MS SQL Analyzer 非常擅长分解查询执行和使用的索引。

Sqlite 有类似的工具吗?

0 投票
8 回答
9382 浏览

sql - SQL查询,执行顺序

如果查询同时具有 group by 和 order by 子句,SQL 的执行顺序是什么。这是否取决于他们在查询中的位置???