我对任何数据库中的查询优化没有一个明确的理解,除了‘它发生’。现在,我刚刚看到了一个“中等”员额,它从优化的角度讨论了使用PostgreSQL CTE的缺陷,因为CTE只进行了一次评估,而且任何可能应用于如何使用CTE的优化,数据库都无法应用。
但是博客文章中的例子似乎很容易优化。
SELECT * FROM foo WHERE id = 500000;
vs
WITH cte AS (
SELECT * FROM foo
)
SELECT * FROM cte WHERE id = 500000;
如果CTE的计算是在第一个需求上懒洋洋地进行,那么我可以想象这两个查询可以以相同的方式进行
对于内存中的OLTP SQL Server 2019数据库(未配置加速的DB恢复)上线所需的时间,我有一个问题。
我有两个表,每个表的大小为40 of (内存中)数据库的一部分。我的问题是,Server是否必须先将完整的两个表加载到内存中,然后才能将DB联机?
假设每个表需要20秒才能从磁盘加载到内存,这取决于磁盘吞吐量,我们是否可以说DB将在至少40秒(每个表为2*20秒)的在线状态下不可用)+定期恢复DB恢复的分析、重做和撤消阶段?
我的理解正确吗?能给我一些关于上述概念的建议吗?
我有两个问题:
'UPDATE foo SET bar = baz WHERE a = b AND c = d'
和
'UPDATE foo SET bar = baz WHERE c = d AND a = b'
两者在语义上是相等的(它们所做的是相同的),但是一个简单的比较就会表明,它们是不同的,因为第一个有a = b AND c = d,而第二个使用c = d AND a = b。
如何检查两个查询在语义上是否相等?
这显然是一个简单的示例,可以通过WHERE节点上语法树的简单字母排序来解决。我感兴趣的是一种通用方法,它也可以解决更复杂的查询--即使是子查