哪个条件查询更快?

问题描述 投票:-1回答:1

哪个更快-子查询中的条件还是整个返回结果的条件?例如:

SELECT *
FROM orders 
LEFT JOIN clients USING (client_id)
LEFT JOIN products USING (products_id)
WHERE orders.orders_id < 50 AND clients.clients_id > 100 AND products.products_id IN (2,5,7,112)

OR

SELECT *
FROM (
   SELECT * FROM orders WHERE orders_id < 50
)
LEFT JOIN (
  SELECT * 
  FROM clients 
  WHERE clients_id > 100
) USING (client_id)
LEFT JOIN (
  SELECT * 
  FROM products 
  WHERE products_id IN (2,5,7,112)
) USING (products_id)

谢谢!

sql postgresql performance
1个回答
0
投票

问题是这些是不同的查询-要清楚

SELECT *
FROM orders 
JOIN clients USING (client_id)
JOIN products USING (products_id)
WHERE clients_id > 100 AND products_id IN (2,5,7,112)

这是第一个查询的实际作用。

由于此数据集可能会小得多,因此它会更快返回(例如,仅10行而不是10k)-当您期望第二个数据集运行得更快时,这可能会令您感到震惊。这就是为什么。

由于在联接表中的列上使用了外部过滤器,所以它们成为内部联接。

在一般情况下,就哪个更快而言...取决于很多东西,索引,数据库拓扑,表大小等。

要在系统上进行从苹果到苹果的测试,请使用此查询作为第一个查询:

SELECT *
FROM orders 
LEFT JOIN clients ON orders.client_id = clients.client_id 
                   and clients.client_id > 100
LEFT JOIN products ON orders.products_id = products.products_id 
                    and products.products_id IN (2,5,7,112)

或此查询作为您的第二个查询

SELECT *
FROM orders 
JOIN (
  SELECT * 
  FROM clients 
  WHERE clients_id > 100
) USING (client_id)
JOIN (
  SELECT * 
  FROM products 
  WHERE products_id IN (2,5,7,112)
) USING (products_id)
© www.soinside.com 2019 - 2024. All rights reserved.