哪个SQL语句更快?
哪个SQL语句更快哪个SQL语句更快?,sql,performance,Sql,Performance,哪个SQL语句更快 SELECT TOP 2 c1.Price, c2.Price, ..... c49.Price, c50.Price FROM Table1 AS c1, Table2 AS c2, ..... Table49 AS c49, Table50 AS c50 WHERE c1.Date = c2.Date AND c2.Date = c3.Date ..... c49.Date = c50.Date ORDER BY c1.ID DESC OR SELEC
SELECT TOP 2 c1.Price, c2.Price, ..... c49.Price, c50.Price
FROM Table1 AS c1, Table2 AS c2, ..... Table49 AS c49, Table50 AS c50
WHERE c1.Date = c2.Date AND c2.Date = c3.Date ..... c49.Date = c50.Date
ORDER BY c1.ID DESC
OR
SELECT TOP 2 c1.Price, c2.Price, ..... c49.Price, c50.Price
FROM (Table1 AS c1
INNER JOIN (Table2 AS c2
........
INNER JOIN (Table49 AS c49
INNER JOIN Table50 AS c50
ON c49.Date = c50.Date)
........
ON c2.FullDate__ = c3.FullDate__)
ON c1.FullDate__ = c2.FullDate__)
ORDER BY c1.ID DESC";
基本上,我需要从每个表中提取2行以定期生成摘要。
哪个语句更快?哪里通常更好,但最好的方法是逐案并将其放入探查器,或者更简单的显示执行计划。对于哪种方法在理论上最快/最好,Folk通常有非常强烈的意见,但没有任何方法可以代替根据实际处理的数据进行实际调整,因为适用的理论会随着数据负载的变化而变化
SELECT TOP 2 c1.Price, c2.Price, ..... c49.Price, c50.Price
FROM Table1 AS c1, Table2 AS c2, ..... Table49 AS c49, Table50 AS c50
WHERE c1.Date = c2.Date AND c2.Date = c3.Date ..... c49.Date = c50.Date
ORDER BY c1.ID DESC
OR
SELECT TOP 2 c1.Price, c2.Price, ..... c49.Price, c50.Price
FROM (Table1 AS c1
INNER JOIN (Table2 AS c2
........
INNER JOIN (Table49 AS c49
INNER JOIN Table50 AS c50
ON c49.Date = c50.Date)
........
ON c2.FullDate__ = c3.FullDate__)
ON c1.FullDate__ = c2.FullDate__)
ORDER BY c1.ID DESC";
如果你的应用程序中还没有真实数据,请尝试创建一些真实的压力数据。这将继续对测试有用。然后,在应用程序启动后安排时间进行调整。哪里通常会更好,但最好的方法是逐案并将其放入探查器,或者更简单的显示执行计划。对于哪种方法在理论上最快/最好,Folk通常有非常强烈的意见,但没有任何方法可以代替根据实际处理的数据进行实际调整,因为适用的理论会随着数据负载的变化而变化
如果你的应用程序中还没有真实数据,请尝试创建一些真实的压力数据。这将继续对测试有用。然后在应用程序启动后安排时间进行调优。尽可能忽略连接。就性能而言,连接语句根本没有效率。尽可能忽略连接。就性能而言,Join语句根本没有效率。您可能会发现SQL优化引擎将生成相同的内部查询(如果逻辑相同),因此不会有任何差异
正如其他人所提到的,通过探查器(如查询分析器)运行此操作以确定差异(如果存在差异)。您可能会发现SQL优化引擎将生成相同的内部查询(如果逻辑相同),因此不会有差异
如其他人所述,通过探查器(如查询分析器)运行此命令以确定差异(如果存在差异)。更快的方法是不从50个表开始。加入50个表也许可以,但这是一种非常反直觉的设计,可能不是最容易维护的解决方案
您不能将数据存储在单个(或更少)表的行(或列)中,而不是存储在50个表中吗 更快的是没有50张表可供使用。加入50个表也许可以,但这是一种非常反直觉的设计,可能不是最容易维护的解决方案
您不能将数据存储在单个(或更少)表的行(或列)中,而不是存储在50个表中吗 通常数据库会优化这两个语句,因此差异不会太大。但您可以通过比较两个查询的解释计划来验证这一点 有一件事可能会使用连接优化查询(我没有验证这一点),那就是在join语句中有额外的约束(非连接约束)。虽然这不是推荐的样式,因为它没有明确区分连接条件和其他条件 例如:
select *
from A a
join B b on b.x = a.y
where b.z = 'ok';
可以写成
select *
from A a
join B b on b.x = a.y and b.z = 'ok';
通常,数据库会对这两个语句进行优化,因此差异不会太大。但您可以通过比较两个查询的解释计划来验证这一点 有一件事可能会使用连接优化查询(我没有验证这一点),那就是在join语句中有额外的约束(非连接约束)。虽然这不是推荐的样式,因为它没有明确区分连接条件和其他条件 例如:
select *
from A a
join B b on b.x = a.y
where b.z = 'ok';
可以写成
select *
from A a
join B b on b.x = a.y and b.z = 'ok';
如果您附上查询计划的屏幕截图和探查器跟踪,我将很乐意让您知道哪个更快。事实上没有足够的信息来回答这个问题 我的直觉是,两者在SQL Server中的性能非常相似,SQL Server对两者进行了优化,以使用相同的查询计划,但谁知道呢,50个表的连接可能会让优化者有点疯狂
我通常会坚持连接语义,因为我发现它更易于阅读和维护。交叉连接非常容易出错,而且非常罕见 如果您附上查询计划的屏幕截图和探查器跟踪,我很乐意告诉您哪个更快。事实上没有足够的信息来回答这个问题 我的直觉是,两者在SQL Server中的性能非常相似,SQL Server对两者进行了优化,以使用相同的查询计划,但谁知道呢,50个表的连接可能会让优化者有点疯狂
我通常会坚持连接语义,因为我发现它更易于阅读和维护。交叉连接非常容易出错,而且非常罕见 谢谢大家的回答 我没有访问查询分析器的权限,因为我当前正在从 我正在做一个快速原型的MS Access访问MySQL。我相信这是正确的 仅在SQL Server上可用,但我可能错了,因此无法附加探查器跟踪 每个表都是不同的(即,即使列名可能相同,其中的值也是唯一的),并且单独用于生成其他对象,但我偶尔需要运行一个摘要,从每个表中收集行。所以,我相信我需要50张桌子,虽然我还没有充实整个计划,因此我会研究它。(另外,我对数据库和SQL不熟悉,但对编程并不陌生)。我还需要考虑内存大小的影响,如果我把所有的信息放在一个表中,只有一小部分将被使用一次。 然而,从我所收集到的信息来看,差异不应该那么大,因为这两个语句