哪个SQL语句具有更好的性能?

时间:2015-12-22 13:13:55

标签: sql postgresql

好吧,我是一个相当缺乏经验的SQL开发人员,我想知道哪些陈述更快。

它只是一个" m-to-n "使用store关系表的store_adminstore_admin_store之间的关系。在那些SQL语句中,我想得到store是" 分配"的所有store_admin。至。有没有附加索引。仅索引ID和相应的外键。

是这个吗:

--
-- STATEMENT 1
--
SELECT
  store.name
FROM
  (SELECT 
     store_admin_store.store_id 
   FROM 
     store_admin_store
   WHERE
     store_admin_store.store_admin_id = 1) as stores, store
WHERE
  stores.store_id = store.id

或那一个:

--
-- STATEMENT 2
--
SELECT
  store.name
FROM store
  JOIN store_admin_store ON store_admin_store.store_admin_id = 1
WHERE store.id = store_admin_store.store_id

或者根本没有区别?

我问的原因是因为如果我省略第二个陈述的WHERE条款:

--
-- STATEMENT 2 (without WHERE clause)
--
SELECT
  store.name
FROM store
  JOIN store_admin_store ON store_admin_store.store_admin_id = 1

我可以看到store.idstore_admin_store.store_id交叉,导致一个非常大的表,我不确定每个语句中到底发生了什么。

或者甚至有更快的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

使用SQL Server Management Studio,您可以收集有关查询的一些统计信息,以确定哪个更快。

这些选项可在以下网址找到:

  • 查询 - > "包括实际执行计划"
  • 查询 - > "包括客户统计"

使用客户端统计信息,您可以运行多个试验并查看总执行时间和查询细分(单位为毫秒)。我有几个表,我运行你的查询(显然修改为从我的表中获取数据)。我还匹配了ID,而不是简单地搜索ID为1的位置。这两个表一起包含大约200万条记录,总执行时间如下:

声明1: 192.00 ms

声明2: 193.60 ms

修改语句1以使用连接而不是逗号。

修改后的声明1: 189.60 ms

正如你所看到的,从两张拥有数百万条记录的牌桌上抓取时间并没有太大变化。如果你的数据库比我小,我真的不担心哪一个更快"因为它可能比任何事情更浪费时间。无论如何,查询执行时间会有几毫秒的变化。

希望这是有用的,并且获得稍微不同的结果并不令人惊讶但是我会说使用连接几乎总是更快,并且只从表中选择所需的数据并将它们转换为在连接中使用。这将消除收集和保存任何不需要的数据。如果我的理解是错误的,我相信有人会在评论中这么说! :^)

示例:

select table1.ID from (select ID from tableA) as table1 join (select ID from tableB) as table2 on table1.ID = table2.ID