繁体   English   中英

SQL查询具有许多联接的大量数据

[英]SQL query for large amount of data with many joins

我已经为我的要求编写了一个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' 

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

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

您不需要包括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)引用WHERE子句中的外部表列可防止OUTER JOIN返回任何不匹配的行,从而将查询隐式转换为INNER JOIN。 这可能是查询中的错误,或者是对OUTER JOIN的工作方式的误解。

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

由于您的所有数据都来自该表,因此请将您的从动表设置为“ 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' 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM