在MySQL和PHP中,使用多文件和左连接的查询速度非常慢
我的问题是,我添加的行越多,检索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行,请注意排名、项目和用户的第三行显示了不同的日期(这是因为我每天都更新数据库) 这就是我的数据结构实际上的样子(基于过于简化的示例): 排名在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新手)。我已经为此挣扎了两个月了。我已经尝试了在互联网上(包括这里)找到的所有可能的
- 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)
第二次编辑:天蝎座0成功了!!!请参见下面的答案 服务器处理查询的时间太长,因为它不是一个简单的查询。您可以优化您的
MySQL
查询和数据库结构,以尝试加快该过程,或者,如果不能,可以通过添加set\u time\u limit(0)将PHP脚本的最大执行时间更改为unlimited(无限制)脚本开头的code>。服务器处理查询的时间过长,因为它不是一个简单的查询。您可以优化您的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);
你会注意到他们的表现