SQL查询包含许多连接的大量数据

时间:2014-12-23 13:00:51

标签: mysql sql-server

我已根据我的要求编写了一个SQL查询 这对我来说很好。这需要0.0006秒来执行。

我想从sql专家那里知道"这可以很好地处理大量数据吗?"。

我在下面写了我的查询。

SELECT HM_customers.id,
       HM_customers.username,
       HM_customers.firstname,
       HM_customers.lastname,
       HM_customers.company,
       HM_customers_address_bank.field_data
FROM   HM_orders
       JOIN HM_order_items
         ON HM_order_items.order_id = HM_orders.id
       JOIN HM_bid
         ON HM_order_items.bid_id = HM_bid.bid_id
       JOIN HM_customers
         ON HM_bid.user_id = HM_customers.id
       JOIN HM_customers_address_bank
         ON HM_customers_address_bank.id = HM_customers.default_billing_address
WHERE  HM_orders.id = '4' 

任何专家都可以建议我或让我知道如何改进此查询。如果此查询中有任何问题,请建议我。

注意: - 这是一个简单的查询。但我想知道,这将使用更少的时间来处理大量数据

3 个答案:

答案 0 :(得分:4)

您不需要包含orders表格:

SELECT c.id,
       c.username,
       c.firstname,
       c.lastname,
       c.company,
       cb.field_data
FROM   HM_order_items oi
       JOIN HM_bid b
         ON oi.bid_id = b.bid_id
       JOIN HM_customers c
         ON b.user_id = c.id
       JOIN HM_customers_address_bank cb
         ON cb.id = c.default_billing_address
WHERE  oi.order_id = '4'; 

如果客户多次对相同的商品出价,您的查询也会导致重复的行。如果您输入select distinct,则会产生重复消除的开销。如果这成为问题,您可能希望将查询重组为exists

答案 1 :(得分:0)

有几点值得注意

1)WHERE子句中对外部表列的引用可防止OUTER JOIN返回任何不匹配的行,这会隐式地将查询转换为INNER JOIN。这可能是查询中的错误或对OUTER JOIN如何工作的误解。

2)如果表格的模式发生变化,选择带有*通配符的所有列将导致查询的含义和行为发生变化,并可能导致查询检索过多的数据。您应该只选择所需的列。

答案 2 :(得分:0)

请将您的驱动表格设为'HM_customers',因为您的所有数据都来自此表并以这种方式更改您的联接,希望这会对您有所帮助:)

SELECT hmCust.id,
       hmCust.username,
       hmCust.firstname,
       hmCust.lastname,
       hmCust.company,
       hmCustAdd.field_data
FROM   HM_customers hmCust
       INNER JOIN HM_bid hmBid
               ON hmBid.user_id = hmCust.id
       INNER JOIN HM_customers_address_bank hmCustAdd
               ON hmCustAdd.id = hmCust.default_billing_address
       INNER JOIN HM_order_items hmOrderItem
               ON hmOrderItem.order_id = hmBid.bid_id
       INNER JOIN HM_orders hmOrder
               ON hmOrder.id = hmOrderItem.order_id
WHERE  hmOrder.id = '4'