PHP MySql - 数据加载速度很慢
我有一个只有30 000行的MySql数据表。这不是一个大数据表,但加载时间显着更长(超过60秒)。我有3个表,分类,产品和公司。我需要根据所选类别加载产品和公司数据。这是我的代码。它的工作原理,但加载非常缓慢..PHP MySql - 数据加载速度很慢
"
SELECT p1.CompanyID
, p1.NameE as ProductName
, p1.CategoryID
, c1.CompanyID as CompanyID
, c1.NameE as CompanyName
FROM Products as p1
JOIN Companies as c1
ON p1.CategoryID = ".$row['CategoryID']."
AND p1.CompanyID = c1.CompanyID
GROUP
BY ProductName
ORDER
BY CompanyName ASC LIMIT 0, 15;
";
请确保您在连接的ON子句中使用的列的索引。然后尝试更改您的查询,如下所示:
$queryList = $db->query(
"SELECT p1.CompanyID, p1.NameE as ProductName, p1.CategoryID, c1.CompanyID as CompanyID, c1.NameE as CompanyName
FROM Products as p1
INNER JOIN Companies as c1
ON p1.CompanyID=c1.CompanyID
WHERE p1.CategoryID=".$row['CategoryID']."
GROUP BY ProductName
ORDER BY CompanyName ASC
LIMIT 0, 15");
谢谢斯隆的建议,它提高了性能。但是加载数据仍需要30秒以上(从60秒降低)。我在列上有索引。 – Arun
你在服务器上使用什么硬件/操作系统?我做了一个包含30k虚拟记录和三个表格的测试,就像您在共享托管服务器上描述的一样。运行查询花费的时间少于0.23秒。除了硬件和相关问题(碎片整理等),我能想到的唯一事情就是如何定义表格。你在使用大型字段吗?检查索引以确保它们已被定义。检查执行计划以查看它们是否正在使用。你的ID字段是无符号整数吗?发布你的表格定义,也许有人可以发现可能有用的东西。 –
请提供查询的执行计划 – GurV
为什么您使用group by by aggregation function? ..(这可能会返回意外的结果列不在组中,并导致一个错误开始到MySQL 5.7) – scaisEdge
移动p1.CategoryID =“。$ rpw ['CategoryID']”。从连接的ON子句到WHERE子句。它不是连接关系的一部分,并限制主表中的记录数。 –