我的问题是我添加的行越多,检索 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 级别的数据结构问题(我没有主键,也没有唯一键,也没有索引设置,因为我不知道如何使用 then)。
让我给你一些关于我正在做什么以及我正在尝试做什么的背景信息。
每天我都会进行几次API 调用,以获取特定搜索引擎的产品和搜索的不同广告的排名位置。我使用 Python 解析 API 对象,同时也将数据注入 MySQL 数据库。
每个页面结果都有一个包含 50 个产品广告的列表,这些广告按与搜索引擎的相关性排序。这个排名位置每天都在变化。每个排名位置列表是根据搜索引擎中使用的关键字('key')生成的。尽管每个产品每天都可以更改其属性,但它始终具有相同的唯一 ID ('ad_id')。例如,产品 ad_id = a001 可以显示它今天的访问量比前一天多 200 次,或者它的卖家可能更改了他/她的“别名”。
我在排名位置列表(排名数据库)中生成uuid 字符串,从那里我将该 uuid 附加到其他数据库。
所以这些是我的表格(见下面的链接)。为了清楚起见,我过度简化了。表格只显示前 3 行,请注意第三行的 RANKINGS、ITEMS 和 USERS 显示不同的日期(这是因为我每天都更新数据库)。
http://oi49.tinypic.com/11ceidz.jpg
这实际上是我的数据结构的样子(基于过于简单的示例):
排名
- c_id int(11),不为空,AUTO_INCREMENT
- ad_id varchar(20),不为空
- rank int(3) 不为空
- 卖家 int(20),不为空
- 键 varchar(30),不为空
- 日期时间戳,CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- uuid varchar(36)
用户
- c_id int(11),不为空,AUTO_INCREMENT
- 卖家 int(20),不为空
- 别名 varchar(30),不为空
- 日期时间戳,CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- uuid varchar(36)
项目
- c_id int(11),不为空,AUTO_INCREMENT
- ad_id varchar(20),不为空
- 标题 varchar(30),不为空
- 字幕 varchar(30), null
- 访问 int(11),不为空
- 日期时间戳,CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- uuid varchar(36)
这是我的查询:
选择rankings.key、rankings.rank、items.visits、users.seller、users.alias、rankings.ad_id、items.title、rankings.date
FROM排名
LEFT JOIN 项目上的rankings.uuid = items.uuid
LEFT JOIN users ON rankings.seller = users.seller
WHERE 排名.key = '苹果'
GROUP BY 排名.日期,排名.排名
我做错了什么?请任何帮助/提示将不胜感激!并感谢您提前提供帮助!
编辑:如果我删除GROUP BY行并添加LIMIT 0,50 个查询的结果将只需要几毫秒......但是有大量重复的行!如果限制为 0,则 500 = 仅 4 秒。
第二次编辑:Scorpi0 成功了!!!请参阅下面的他/她的答案。