PHP MySql-非常慢的数据加载

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

我有一个MySql数据表,只有30000行。它不是一个大数据表,但加载时间明显高于60秒。我有三张表,分别是分类表、产品表和公司表。我需要根据所选类别加载产品和公司数据。这是我的密码。它可以工作,但加载速度非常慢

"
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字段是无符号整数吗?发布你的表格定义,也许有人能发现一些有用的东西。