gpt4 book ai didi

php - 加快慢速 3 表 MYSQL 查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:16 24 4
gpt4 key购买 nike

我正在查询电子商务网站中的 3 个表。

订单表:

id
order_number
name
etc...

order_lines 表:

id
order_number
sku
quantity
etc.

产品表

id
sku
title
ship_by (INT)
etc.

order_numberorders 表链接到 order_lines 表。 SKUorder_lines 表链接到 products 表。

请注意产品表中的 ship_by 列,这表示将由哪个供应商发货。查询需要拉取特定供应商的订单。订单可能包含不同供应商销售的商品。

这是我设法拼凑的查询:

SELECT 
orders.`order_number` as `orderId`,
orders.`shipping` as `fPostageCost`,
FROM_UNIXTIME(orders.`time`) as `dReceievedDate`,
(
CASE orders.`dob`
WHEN 'COURIER 3 DAY' THEN 'UK_SellersStandardRate'
WHEN 'COURIER 24 HOUR' THEN 'UK_OtherCourier24'
ELSE orders.`dob`
END
)
...(plus a number more)

FROM orders
INNER JOIN order_lines
ON orders.order_number = order_lines.order_number
WHERE
(
(SELECT COUNT(order_lines.sku)
FROM order_lines, products
WHERE order_lines.sku = products.sku
AND products.ship_by = 1
AND order_lines.order_number = orders.order_number) > 0
)
AND ( orders.`printed` = 'N' OR orders.`printed` IS NULL )
AND orders.status = 'Awaiting Despatch'
AND ( orders.payment_status = 'Success' OR orders.payment_status = 'Paypal Paid' OR orders.payment_status = 'Manual Payment' )
GROUP BY orders.`order_number`
ORDER BY orders.order_number ASC

执行查询大约需要 7 秒。

如果我从第二个 SELECT 查询中删除“AND order_lines.order_number = orders.order_number”这一行,它几乎会立即执行,但如果没有这一行,它就无法正常工作。

除了将“ship_by”列添加到 order_lines 表中(我宁愿不这样做,因为我必须更改大量 php 代码),是否有任何方法可以修改此查询以加快它的速度?

查询是从 PHP 外部运行的,因此它必须是纯 mysql 查询。

这是查询的解释:

id  select_type         table        type     possible_keys     key         key_len     ref                                     rows    Extra
1 PRIMARY order_lines ALL NULL NULL NULL NULL 9627 Using temporary; Using filesort
1 PRIMARY orders eq_ref order_idx order_idx 17 .order_lines.order_number 1 Using where
2 DEPENDENT SUBQUERY order_lines ALL NULL NULL NULL NULL 9627 Using where
2 DEPENDENT SUBQUERY products ref sku_2,sku,sku_3 sku_2 63 order_lines.prod_code 11 Using where

谢谢

最佳答案

您的order_lines 表至少需要一个order_number 索引。我们需要查看架构才能最好地选择一个。也许综合指数会在其他领域加快速度。

但在选择索引更改时,必须仔细权衡系统中的其他查询以及对插入和更新速度的影响。

目标不应该是以牺牲 90% 的速度来提高 10% 的应用速度。

要显示非常有用的信息,请为相关表名发布show create table tableName。 (相对于徒手描述它,就像我的 table 有这个和那个)。我们需要查看订单、订单行、产品的架构。

Create Index 上的手册页

关于php - 加快慢速 3 表 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com