Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
在MySQL和PHP中,使用多文件和左连接的查询速度非常慢_Sql_Performance_Phpmyadmin_Localhost_Left Join - Fatal编程技术网

在MySQL和PHP中,使用多文件和左连接的查询速度非常慢

在MySQL和PHP中,使用多文件和左连接的查询速度非常慢,sql,performance,phpmyadmin,localhost,left-join,Sql,Performance,Phpmyadmin,Localhost,Left Join,我的问题是,我添加的行越多,检索SQL查询结果所需的时间就越多。我不是说大量的行(10000-80000行)。起初,从查询中检索结果需要几毫秒的时间,昨天显示50行最多需要3分钟,但从今天开始,最多只需要3分钟: 致命错误:第247行的C:\wamp\apps\phpmyadmin3.5.1\libraries\dbi\mysqli.dbi.lib.php中超过了300秒的最大执行时间 找不到问题所在(我是SQL新手)。我已经为此挣扎了两个月了。我已经尝试了在互联网上(包括这里)找到的所有可能的

我的问题是,我添加的行越多,检索SQL查询结果所需的时间就越多。我不是说大量的行(10000-80000行)。起初,从查询中检索结果需要几毫秒的时间,昨天显示50行最多需要3分钟,但从今天开始,最多只需要3分钟:

致命错误:第247行的C:\wamp\apps\phpmyadmin3.5.1\libraries\dbi\mysqli.dbi.lib.php中超过了300秒的最大执行时间

找不到问题所在(我是SQL新手)。我已经为此挣扎了两个月了。我已经尝试了在互联网上(包括这里)找到的所有可能的解决方案来加速这件事,我甚至更改了主机、phpMyAdmin、MySQL、httpd.config、iPV6等的配置文件。但由于这些都不起作用,我回滚了所有更改,创建了一个新数据库,我在其中添加了一个唯一的uuid,以左键连接数据库中的表

但它仍然像一只斑驳的树懒一样慢

我不确定这是PHP、MySQL、apache本地服务器(WAMPP)的问题,还是SQL级别的数据结构问题(我没有主键,也没有唯一键,也没有索引集,因为我不知道如何使用它)

让我给你一些我正在做和试图做的背景信息

每天我都会调用几个API,以获取特定搜索引擎中不同产品和搜索广告的排名。我使用Python解析API对象,但也将数据注入MySQL数据库

每个搜索结果页面都有一个50条产品广告的列表,这些广告是根据它们与搜索引擎的相关性排序的。这个排名每天都在变化。根据搜索引擎中使用的关键字(“关键字”)生成每个排名位置列表。尽管每个产品每天都可能改变其属性,但它始终具有相同的唯一id(“ad_id”)。例如,产品ad_id=a001可能显示今天的访问量比前一天多200次,或者其卖家可能更改了他的/她的“别名”

我在排名位置列表(排名数据库)的右侧生成uuid字符串,然后将该uuid附加到其他数据库

因此,这些是我的表(见下面的链接)。为了清楚起见,我过于简化了。表格仅显示前3行,请注意排名、项目和用户的第三行显示了不同的日期(这是因为我每天都更新数据库)

这就是我的数据结构实际上的样子(基于过于简化的示例):

排名

  • c_id int(11),非空,自动递增
  • ad_id varchar(20),不为空
  • 秩int(3)不为空
  • 卖方整数(20),不为空
  • 键varchar(30),不为空
  • 日期时间戳,更新当前时间戳时的当前时间戳
  • uuid varchar(36)
用户

  • c_id int(11),非空,自动递增
  • 卖方整数(20),不为空
  • 别名varchar(30),不为空
  • 日期时间戳,更新当前时间戳时的当前时间戳
  • uuid varchar(36)
项目

  • c_id int(11),非空,自动递增
  • ad_id varchar(20),不为空
  • title varchar(30),不为空
  • 副标题varchar(30),空
  • 访问int(11),不为空
  • 日期时间戳,更新当前时间戳时的当前时间戳
  • uuid varchar(36)
这是我的问题

选择rankings.key、rankings.rank、items.Visitions、users.seller、users.alias、rankings.ad_id、items.title、rankings.date

从排名

LEFT JOIN items on rankings.uuid=items.uuid

左键加入排名中的用户。卖家=用户。卖家

WHERE rangements.key='apple'

按排名分组。日期,排名。排名

我做错了什么?请提供任何帮助/提示,我们将不胜感激!提前谢谢你的帮助

编辑:如果我删除分组依据行并添加限制0,50个查询结果只需几毫秒…但有大量重复行!如果限制为0,500=仅4秒


第二次编辑天蝎座0成功了!!!请参见下面的答案

服务器处理查询的时间太长,因为它不是一个简单的查询。您可以优化您的
MySQL
查询和数据库结构,以尝试加快该过程,或者,如果不能,可以通过添加
set\u time\u limit(0)将PHP脚本的最大执行时间更改为unlimited(无限制)

服务器处理查询的时间过长,因为它不是一个简单的查询。您可以优化您的
MySQL
查询和数据库结构,以尝试加快该过程,或者,如果不能,可以通过添加
set\u time\u limit(0)将PHP脚本的最大执行时间更改为unlimited(无限制)在脚本的开头。

我没有主键,也没有唯一键,也没有索引集,因为我不知道如何使用它

真的吗?那就学习
在没有索引的情况下,查询运行在具有3个表的O(n^3)中。有了索引,它将在O(logn)中运行

快跑

CREATE INDEX idxrankginsuuid ON rankings(uuid);
CREATE INDEX idxrankingsseller ON rankings(seller);
CREATE INDEX idxrankingskey ON rankings(key);

CREATE INDEX idxitemsuuid ON items(uuid);

CREATE INDEX idxuserseller ON users(seller);
您会注意到性能的提高

如果不知道主键和索引的工作原理,就不能使用SQL。

我没有主键,也没有唯一键,也没有索引集,因为我不知道如何使用它

真的吗?那就学习
在没有索引的情况下,查询运行在具有3个表的O(n^3)中。有了索引,它将在O(logn)中运行

快跑

CREATE INDEX idxrankginsuuid ON rankings(uuid);
CREATE INDEX idxrankingsseller ON rankings(seller);
CREATE INDEX idxrankingskey ON rankings(key);

CREATE INDEX idxitemsuuid ON items(uuid);

CREATE INDEX idxuserseller ON users(seller);
你会注意到他们的表现