[英]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.