【发布时间】:2014-09-24 00:08:38
【问题描述】:
我有一家拥有数千个订单的在线商店,我正在编写一些查询以了解每个供应商(品牌)在该网站上赚了多少钱。我有以下查询,所选年份的每个月都有一个查询:
$filterJan = "$filterYear-01";
$queryJan = "SELECT price, quantity FROM order_items WHERE productID='$productID' AND timestamp LIKE '%$filterJan%' LIMIT 10000";
$suppliersQueryFilter = mysql_query($queryJan, $connection) or die(mysql_error());
while($rowF = mysql_fetch_assoc($suppliersQueryFilter)) {
$price = $rowF["price"]*$rowF["quantity"];
$totalJan = $totalJan+$price;
}
** 每月以此类推**
加载需要很长时间(我们所说的时间至少超过 60 秒),而且我知道它在任何形式或形式上都没有效率。每个月,这些查询都在搜索数千条记录。是否有更有效的方法或将其写入:
a) 将代码量减少到可能 1 个查询 b) 提高加载时间的效率
$filterYear 包含年份,例如 2009。
因此,此查询的作用是选择选定年份(分配给 $filterYear)每个月赚了多少钱。所以它生成的结果是一张包含一月、二月、三月的表格……每个月赚了多少钱,所以是 2345 英镑、2101 英镑等等……
【问题讨论】:
-
是的。请改用一个查询。
-
一个查询通常比 12 更有效,尤其是在结果上进行那些可怕的循环以获得每个月的总价格(使用 SQL 的 SUM() 聚合函数);但是您查看过 order_items 表上的索引吗?
-
@Strawberry 如何将其转换为 1 个查询? (我不是最好的)
-
并为您的时间戳列使用其他过滤器。
LIKE '%anything%'不能通过索引来帮助。您可以使用简单的 BETWEEN ... AND 或类似的。 -
对年/月使用 GROUP BY 子句
标签: php mysql sql performance