Bri*_*e64 1 sql performance localhost phpmyadmin left-join
我的问题是我添加的行越多,检索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
从排名
LEFT JOIN项目在rankings.uuid = items.uuid
LEFT JOIN用户ON rankings.seller = users.seller
在哪里排名.key ='apple'
GROUP BY rankings.date,rankings.rank
我做错了什么?请完全赞赏任何帮助/提示!谢谢你提前帮忙!
编辑:如果我删除GROUP BY行并添加LIMIT 0,50查询的结果将只需几毫秒...但有大量的重复行!如果限制0,500 =仅4秒.
第二次编辑:Scorpi0钉了它!!! 请参阅下面的答案.
哇!
我没有主键,也没有唯一键,也没有索引集,因为我不知道如何使用
真的吗?然后学习!!
如果没有索引,查询将在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);
Run Code Online (Sandbox Code Playgroud)
你会注意到性能的提高.
如果不知道主键和索引是如何工作的,就无法执行SQL.
| 归档时间: |
|
| 查看次数: |
1721 次 |
| 最近记录: |