我的问题是我添加的行越多,检索SQL查询结果所需的越多。我不是在谈论大量的行(10,000到80,000之间)。一开始我需要几毫秒才能从查询中检索结果,昨天我需要花费3分钟才能显示50行,但是从今天开始它只能最大化:
致命错误:第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行,请注意RANKINGS,ITEMS和USERS的第三行显示不同的日期(这是因为我每天更新数据库)。
http://oi49.tinypic.com/11ceidz.jpg
这实际上是我的数据结构的样子(基于过于简化的示例):
排名
用户
项
这是我的查询:
SELECT rankings.key,rankings.rank,items.visits,users.seller,users.alias,rankings.ad_id,items.title,rankingings.date
FROM排名
在Rankings.uuid = items.uuid
上的LEFT JOIN项目LEFT JOIN用户ON rankings.seller = users.seller
WHERE rankings.key ='apple'
GROUP BY rankings.date,rankings.rank
我做错了什么?请完全赞赏任何帮助/提示!谢谢你提前帮忙!
编辑:如果我删除 GROUP BY 行并添加 LIMIT 0,50 查询结果只需几毫秒...但是有大量的重复行!如果限制0,500 =仅4秒。
第二次编辑: Scorpi0 钉了它!!!请参阅下面的答案。
答案 0 :(得分:5)
哇!
我没有主键,也没有唯一键,也没有索引集,因为我不知道如何使用
真的?然后学习!!
如果没有索引,查询将在O(n ^ 3)中运行3个表。使用索引,它将在O(log n)中运行。
跑步
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。
答案 1 :(得分:0)
服务器持续过多以处理查询,因为它不是一个简单的查询。您可以优化MySQL
查询和数据库结构以尝试加速该过程,或者,如果不能,则通过添加set_time_limit(0);
将最大执行时间更改为PHP脚本的无限制。脚本的开头。