gpt4 book ai didi

PHP - MySQL 1.000.000 记录查询优化

转载 作者:行者123 更新时间:2023-11-30 21:55:18 27 4
gpt4 key购买 nike

感谢您花时间回答我的问题,如果已经有人问过类似的问题,我深表歉意。

我有以下数据库示意图:

db scheme

我对数据库只有 SELECT 权限。在当前设置下,我的查询往往会运行 2-3 秒到 10 秒。我被要求优化当前配置的最佳结构,我的 SQL 如下所示:(我需要获得所有订单中每个产品的总收入,间隔为 1 个月)

SELECT items.`type` AS type, 
DATE(orders.date) AS date,
sum(items.price * orders.quantity * clients.discount_percent/100) AS total
FROM orders
INNER JOIN items ON orders.item = items.id
INNER JOIN clients ON orders.`client` = clients.id
GROUP BY DATE(orders.date), items.`type`

我正在考虑通过修改在 PHP 端处理数据的 SQL 来分块结果 - 但不确定它是否有效。

如果可以对此进行优化,我很想听听您的意见 :)。

韩国,笨蛋

附言解释结果: EXPLAIN

最佳答案

一般来说,你的性能问题是由于对“订单”的全表扫描造成的

小数据集(~10MB)的运行时间这么长很奇怪。在我的服务器上进行类似的查询大约需要 1 秒。

尝试优化数据类型以适应较小的数据大小。(对于索引,您必须使用 int)。

检查 Orders.Data 是否有索引。

检查 Orders.Data 是否为 Date 类型以提高索引性能。

在所有情况下,您都在使用一些聚合函数(group 和 sum),这些类型的函数非常昂贵,因为服务器首先生成一个包含所有数据的大表,然后再执行聚合函数。

如果您的性能问题是由于服务器配置(工作负载、内存或...)引起的,您可以缓存结果以避免每次都重新计算所有结果。

关于PHP - MySQL 1.000.000 记录查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45464508/

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