PHP MySql-非常慢的数据加载
我有一个MySql数据表,只有30000行。它不是一个大数据表,但加载时间明显高于60秒。我有三张表,分别是分类表、产品表和公司表。我需要根据所选类别加载产品和公司数据。这是我的密码。它可以工作,但加载速度非常慢PHP MySql-非常慢的数据加载,php,mysql,Php,Mysql,我有一个MySql数据表,只有30000行。它不是一个大数据表,但加载时间明显高于60秒。我有三张表,分别是分类表、产品表和公司表。我需要根据所选类别加载产品和公司数据。这是我的密码。它可以工作,但加载速度非常慢 " SELECT p1.CompanyID , p1.NameE as ProductName , p1.CategoryID , c1.CompanyID as CompanyID , c1.NameE as CompanyName FR
"
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");
请提供查询的执行计划您为什么使用group by而不使用聚合功能。。这可能会为不在group by中的列返回意外结果,并导致启动mysql 5.7移动p1时出错。CategoryID=.$rpw['CategoryID']。从join的ON子句到WHERE子句。它不是联接关系的一部分,并限制主表中的记录数。有关查询性能的问题至少需要显示所有相关表的CREATE table语句以及EXPLAIN的结果。如上所述,在没有任何聚合函数的情况下,包含GROUP BY子句可能会提供错误的结果。感谢Sloan的建议,它提高了性能。但从60秒下载数据仍然需要30秒以上。我在列上有索引。您在服务器上使用什么硬件/操作系统?我用30k虚拟记录和三个表做了一个测试,就像您在共享托管服务器上描述的那样。运行查询所用的时间少于0.23秒。除了硬件和相关问题,碎片整理等。我唯一能想到的是如何定义表。是否使用大字段类型?检查索引以确保它们已定义。检查执行计划,查看是否正在使用它们。您的ID字段是无符号整数吗?发布你的表格定义,也许有人能发现一些有用的东西。