我已根据我的要求编写了一个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'
任何专家都可以建议我或让我知道如何改进此查询。如果此查询中有任何问题,请建议我。
注意: - 这是一个简单的查询。但我想知道,这将使用更少的时间来处理大量数据
答案 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'