Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-MySQL 1.000.000记录查询优化_Php_Mysql - Fatal编程技术网

PHP-MySQL 1.000.000记录查询优化

PHP-MySQL 1.000.000记录查询优化,php,mysql,Php,Mysql,谢谢你花时间回答我的问题,如果已经有人问过类似的问题,我也很抱歉 我有以下DB的示意图: 我对数据库只有选择权限。 在当前设置下,我的查询通常会从2-3秒运行到10秒。 我被要求优化到当前配置的最佳结构,我的SQL如下所示:(我需要获得所有订单(间隔1个月)内每个产品的总收入) 我曾考虑过通过修改SQL来对PHP端的数据进行分块,但不确定这是否有效 如果可以优化的话,我很想听听你的意见:) 韩国, 笨蛋 附言。 解释结果: 字段订单。项目和订单。客户是否被索引?如果使用Phpmyadmin创建

谢谢你花时间回答我的问题,如果已经有人问过类似的问题,我也很抱歉

我有以下DB的示意图:

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

我曾考虑过通过修改SQL来对PHP端的数据进行分块,但不确定这是否有效

如果可以优化的话,我很想听听你的意见:)

韩国, 笨蛋

附言。 解释结果:

字段
订单。项目
订单。客户
是否被索引?如果使用Phpmyadmin创建表,则必须将字段指定为索引以及将具有的关系,因此,当您使用
连接进行类似的查询时,查询最适合搜索

当然,您可以
更改表并设置
索引等字段,但它们必须是相同的类型,否则关系将无法指定!示例您的
主键
外键
必须是
INT UNSIGNED


我希望你认为这个答案是有用的。

一般来说,你的性能问题是由于对“订单”

的全表扫描而造成的。 奇怪的是,对于一个小数据集(~10MB)来说,运行时间如此之长。在我的服务器上执行类似的查询大约需要1秒钟

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

检查订单。数据是否有索引

检查订单。数据类型是否为日期,以提高索引性能

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


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

是否有日期索引列(也包括项目、客户端)?这些表上有哪些索引?解释对此查询显示了什么?您应该从获取解释计划开始。但是如果不允许您创建索引,那将很有趣。您的查询中没有任何无关的内容,获取所需的数据是正确的。此处的性能可能与相关表上的索引有关,请运行EXPLAIN以查找瓶颈。如果您的条件列上没有索引,并且不允许更改数据库结构,则可以生成运行时索引、查询并释放索引。这是一个有点昂贵的解决方案,但可以在不改变数据库结构的同时缩短查询时间。
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`