问题标签 [query-planner]
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.
sql - 如何阅读 PostgreSQL EXPLAIN,顺序:自上而下或自下而上?
这是explain.depesz.com上的示例计划:
这些操作按什么顺序执行?自下而上?自顶向下?
sql - JOIN with OR - 查询规划器选择嵌套循环
我想知道为什么 MS SQL Server Query Planner 创建嵌套循环而不是为带有 OR 条件的 JOIN 选择联合。
注意:通过搜索 SO,似乎不是特定于 MSSQL
例如
在我的情况下需要 6 分钟(一个和两个都在两个表上都有索引)
但
需要 2 秒。
我知道第一个需要这么长时间的原因(因为嵌套循环,其中 2 个联合使用索引),但我想知道为什么查询计划程序不选择 UNION 作为执行计划?
在使用它不使用它的 UNION 时,我需要注意一些警告吗?
为什么这个逻辑没有在查询计划器中实现?
是否只是为了让查询计划器的代码更简单(因为它可能已经很复杂了),他们还没有优化的东西,或者因为还有其他一些我不知道的警告?
postgresql - 为什么添加 JOIN 会完全修改查询计划器的行为?
我有两个疑问:
还有一个也一样JOIN
:
这些查询是由 Django ORM 生成的。第一个需要 3 毫秒,而第二个需要 120 秒(!)。我做了一个VACUUM ANALYZE
。给出以下EXPLAIN ANALYZE
内容:
是什么导致查询计划器走这条路?为什么第二个查询中没有使用索引?
我尝试禁用哈希,但它使用了更复杂的方法。
编辑:
有关索引的更多信息:
postgresql - 在这种情况下,为什么 Postgresql 不对我的复合索引使用仅索引扫描?
我的表有整数列“a”、“b”。“a”只有少数(<30)个不同的值,但对于每个“a”,存在大量不同的“b”(>10**7)。为了加快速度,我创建了复合索引 (a,b)。我观察到
跑得快,也
跑得很快,但是
运行(哦,天哪)慢,同样适用
运行解释解释,快速查询使用
但对于慢速查询,使用顺序扫描。
为什么会这样?为什么 Postgresql 后两个查询不使用相同的索引?仅仅是查询计划器的不完善,还是不能使用 Index Only Scan 的更深层次的原因?
indexing - sqlite3 发生了什么变化,使得查询计划不再显示估计的行数?
在 3.7.8 版本中,查询计划看起来像
但对于 3.8.10.2 它是
发生了什么变化?我可以以某种方式配置它再次显示估计的行数吗?
postgresql - 为什么 Postgres 的规划时间和执行时间如此不同?
我做了这样的查询
Postgres 用这个回复我:
计划时间:0.286 ms
执行时间:127.233 ms
为什么是这样 ?我觉得差别太大了
mysql - 查询计划成本混乱
以下具有不同限制计数的查询,制定出不同的查询计划和非常不同的扫描行:
带有索引的表:
为什么不同的limit(50 vs 500)做出不同的查询计划,扫描行有很大的变化?</p>
postgresql - PostgreSQL - 奇怪的查询计划器行为
假设我有这样的查询:
在生产环境中使用此查询大约需要 35 秒(“客户端”有大约 100 万条记录)。但是,如果我取出 ANY 连接 - 查询只需大约 300 毫秒即可执行。
我玩过查询计划器设置,但无济于事。
以下是一些解释分析输出:
看起来在快速情况下,计划程序从 EXISTS 语句开始,并且总共只需要对两行执行连接。但是,在缓慢的情况下,它将首先连接所有表,然后按 EXISTS 过滤。
我需要做的是让这个查询在合理的时间内运行,同时所有七个连接都到位。
CentOS 6.3 上的 Postgres 版本是 9.3.10。
谢谢。
更新
像这样重写查询:
使它运行得很快,但是,这是不可接受的,因为帐户过滤参数是可选的,如果该表中没有匹配项,我仍然需要结果。使用“LEFT JOIN 帐户”而不是“INNER JOIN 帐户”会再次破坏性能。
sql-server - 带有日期变量的 SQL Server 存储过程非常慢
我在 SQL Server 中运行存储过程,例如:
这是忽略日期列上的索引。我用一个参数运行选择查询就可以了,我改成这个就可以了:
我将整个查询更改为动态 SQL,现在它也运行良好。
这里发生了什么?
sql - *IN* 子句中的参数计数发生变化时,可以重用数据库执行计划吗?
如果在 IN 子句中使用 10 个参数执行查询,然后再次执行相同的查询但使用 20 个参数,数据库服务器是否可以重用第一次运行的执行计划,或者每次都必须创建一个新的执行计划时间?