Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪个SQL语句更快?_Sql_Performance - Fatal编程技术网

哪个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

哪个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

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不熟悉,但对编程并不陌生)。我还需要考虑内存大小的影响,如果我把所有的信息放在一个表中,只有一小部分将被使用一次。 然而,从我所收集到的信息来看,差异不应该那么大,因为这两个语句