哪个 SQL 查询更快,为啥?

     2023-05-08     286

关键词:

【中文标题】哪个 SQL 查询更快,为啥?【英文标题】:Which SQL query is faster and why?哪个 SQL 查询更快,为什么? 【发布时间】:2011-07-04 19:40:50 【问题描述】:

最近,有人要求我编写一个查询,以便从包含最大数量的此类实体的组中选择实体的属性。因此,我在 Northwind(MSFT 分布式示例)数据库上通过多种方式进行了此操作。

一个:

SELECT cat.CategoryName, prod.ProductName 
  FROM Categories cat 
  JOIN Products prod ON cat.CategoryID = prod.CategoryID
  JOIN (SELECT TOP 1 p.CategoryID, COUNT(p.ProductId) as products
          FROM Categories c 
          JOIN Products p on c.CategoryID = p.CategoryID
      GROUP BY p.CategoryID
      ORDER BY products desc) c ON c.CategoryID = cat.CategoryID

两个:

SELECT cat.CategoryName, prod.ProductName
  FROM Categories cat
  JOIN Products prod ON cat.CategoryID = prod.CategoryID
  JOIN (SELECT CategoryID, COUNT(ProductID) m_count
          FROM Products 
      GROUP BY CategoryID
        HAVING COUNT(ProductID) = (SELECT MAX(sub.cnt) 
                                     FROM (SELECT CategoryId, COUNT(ProductID) cnt 
                                             FROM Products 
                                         GROUP BY CategoryId) sub)) m ON m.CategoryID = cat.CategoryID

问题是:为什么会更快?在执行计划中,没有什么特别突出的。经过的时间略有不同,但大致相同。当然,数据库很小。

【问题讨论】:

也许你可以显示执行计划? 如果数据库很小,那么这个问题就没有意义了。 我没有庞大的数据库来验证;因此问题。如果我能看到显着的差异,我为什么要问它? :-) 我认为 SQL 专家可以立即指出一些陷阱。 【参考方案1】:

一个很小的数据库很难确定哪个更好,但 SQL Server Management Studio 具有将语句的效率相互比较的功能。

    打开管理工作室 点击“新建查询”按钮 点击启用“包括实际查询计划” 将所有查询发布到活动查询窗口中 点击“执行”按钮 点击“执行计划”标签(结果左侧)

查询成本由运行的查询次数平均得出。因此,如果比较作为示例提供的两个查询,如果两者的成本均为 50%,那么它们是等价的(因为 100 / 2 = 50 等)。当存在差异时,您可以将鼠标悬停在 SELECT 上以查看子树成本,此外还可以查看执行路径的图形布局。

为什么一个比另一个快?

这取决于数据库——连接的数据类型(它们是否尽可能窄?“窄”意味着存储的字节数更少)、索引以及查询中执行的操作。使用不同的语法可以产生很大的不同。

【讨论】:

【参考方案2】:

在激活SET SHOWPLAN_ALL ON 的情况下执行两条SQL 语句。 SQL Server 将为您提供查询信息,这将有助于您了解正在发生的事情以及哪个/将更快。

【讨论】:

谢谢你。我相信这和上面的答案是一样的。

为啥执行存储过程比脚本中的 SQL 查询更快?

】为啥执行存储过程比脚本中的SQL查询更快?【英文标题】:WhyexecutestoredproceduresisfasterthanSQLqueryfromascript?为什么执行存储过程比脚本中的SQL查询更快?【发布时间】:2011-12-1909:42:10【问题描述】:事实上,如果我从我的应用程... 查看详情

为啥我的 Sql 查询第二次运行更快?

】为啥我的Sql查询第二次运行更快?【英文标题】:WhyismySqlQueryisFastertheSecondTimeitRuns?为什么我的Sql查询第二次运行更快?【发布时间】:2018-10-2906:45:23【问题描述】:每次我在执行SQL查询时获得相同的执行时间。如果SQL查询多... 查看详情

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

】为啥MS-Access中的Teradata查询比SQLServer更快【英文标题】:WhyisaTeradataqueryfasterinMS-AccessthanSQLServer为什么MS-Access中的Teradata查询比SQLServer更快【发布时间】:2015-05-1518:55:27【问题描述】:我需要连接一个包含大约5亿条记录的Teradata... 查看详情

为啥 SQL Server 2005 中的查询会因为它在视图中而变得更快?

】为啥SQLServer2005中的查询会因为它在视图中而变得更快?【英文标题】:WhywouldaquerybefasterinSQLServer2005justbecauseit\'sinaview?为什么SQLServer2005中的查询会因为它在视图中而变得更快?【发布时间】:2009-11-1309:30:03【问题描述】:我们... 查看详情

插入、更新或删除 MongoDB 或 SQL 哪个更快?

】插入、更新或删除MongoDB或SQL哪个更快?【英文标题】:Whatisfastertoinsert,updateordeleteMongoDBorSQL?【发布时间】:2019-05-1612:48:00【问题描述】:我正在决定在我的下一个应用程序中使用MongoDB和MySQL。我将使用Elasticsearch进行搜索查询... 查看详情

这两个sql查询语句哪个更快?

...name列like'%b%'所对应的TableB的value有这两个sql语句,哪个效率更高呢?A:selectb.valuefromTableAa,TableBwherea.id=b.idanda.namelike'%b%';B:selectvaluefromTableBwhereidin(selectidfromTableAwherenamelike'%b%');说明理由,还有就是如何看一个语句... 查看详情

哪个查询更可取以及为啥

】哪个查询更可取以及为啥【英文标题】:whichqueryismorepreferableandwhy哪个查询更可取以及为什么【发布时间】:2010-01-1500:11:58【问题描述】:我正在尝试自学SQL,当然我想遵循最佳实践。我创建了两个查询来查找最新记录:select*... 查看详情

哪个更快: char(1) 或 tinyint(1) ?为啥?

】哪个更快:char(1)或tinyint(1)?为啥?【英文标题】:Whichisfaster:char(1)ortinyint(1)?Why?哪个更快:char(1)或tinyint(1)?为什么?【发布时间】:2011-01-0216:02:15【问题描述】:我的平台:PHP和mySQL我的情况:我遇到了一种情况,我需要在... 查看详情

哪个更快?组合查询还是多个查询?

】哪个更快?组合查询还是多个查询?【英文标题】:WhichisFaster?CombinedorMultipleQueries?【发布时间】:2017-12-2320:56:45【问题描述】:这些查询在1millionrecord的表中的性能方面有什么不同吗?id是PRIMARYuserid是INDEXEDname是UNIQUE组合查询... 查看详情

哪个选择查询将运行得更快[重复]

】哪个选择查询将运行得更快[重复]【英文标题】:WhichSelectquerywillrunfaster[duplicate]【发布时间】:2014-12-0207:38:55【问题描述】:您好,我正在尝试从包含大约100万条记录的表中获取最大ID。请建议我在这些查询中哪一个执行得更... 查看详情

哪个Oracle查询更快

】哪个Oracle查询更快【英文标题】:WhichOraclequeryisfaster【发布时间】:2018-11-2415:08:50【问题描述】:我正在尝试使用C#WPF视图显示员工属性。我的数据库中有“2”个不同的oracle表中的数据:那些高层次的表结构是……员工表(EMP)-... 查看详情

为啥 Spark 查询在第二次执行时运行得更快?

】为啥Spark查询在第二次执行时运行得更快?【英文标题】:WhydoesaSparkqueryrunfasterwhenit\'sexecutedasecondtime?为什么Spark查询在第二次执行时运行得更快?【发布时间】:2020-10-0719:03:10【问题描述】:我第二次运行查询时速度明显更快... 查看详情

哪个是更快的单个大查询或几个小查询?

】哪个是更快的单个大查询或几个小查询?【英文标题】:Whichoneisfastersinglebigqueryorfewsmallqueries?【发布时间】:2015-07-1204:11:52【问题描述】:所以我想从数据库中抓取数据,哪种方法更快,创建几个查询还是一个多查询?【问题... 查看详情

为啥这个 pg 查询这么慢?我怎样才能让它更快?

】为啥这个pg查询这么慢?我怎样才能让它更快?【英文标题】:Whyisthispgquerysoslow?HowcanImakeitfaster?为什么这个pg查询这么慢?我怎样才能让它更快?【发布时间】:2019-09-2804:51:03【问题描述】:这是查询:(SELECT*FROMurlWHEREdomain=\'yo... 查看详情

哪个更快?组合或多个查询?(代码片段)

在使用1millionrecord的表格中,这些查询与性能有什么不同?id是PRIMARYuserid是INDEXEDname是UNIQUE组合查询:$Query='SELECTname,(SELECTEXISTS(SELECTidFROMreportsWHEREuserid=1))ASstatusFROMusersWHEREid=1LIMIT1';$stmt->prepare($Query 查看详情

哪个 SQL 语句更快? (拥有与在哪里......)

】哪个SQL语句更快?(拥有与在哪里......)【英文标题】:WhichSQLstatementisfaster?(HAVINGvs.WHERE...)【发布时间】:2010-09-2415:00:51【问题描述】:SELECTNR_DZIALU,COUNT(NR_DZIALU)ASLICZ_PRAC_DZIALUFROMPRACOWNICYGROUPBYNR_DZIALUHAVINGNR_DZIALU=30或SELECTNR_DZI 查看详情

Android SQLite:哪个查询(“query”或“rawQuery”)更快?

】AndroidSQLite:哪个查询(“query”或“rawQuery”)更快?【英文标题】:AndroidSQLite:Whichquery("query"or"rawQuery")isfaster?【发布时间】:2012-02-0811:40:48【问题描述】:我正在开发一个android数据库应用程序。我只想知道哪... 查看详情

为啥使用参数化查询将数据插入表中比将值附加到查询字符串更快?

】为啥使用参数化查询将数据插入表中比将值附加到查询字符串更快?【英文标题】:Whyisusingaparameterizedquerytoinsertdataintoatablefasterthanappendingthevaluestothequerystring?为什么使用参数化查询将数据插入表中比将值附加到查询字符串更快... 查看详情