curent im使用:(花了0.4秒)
+从表中获取最后50条记录:
SELECT sid,aid,title,time,topic,informant,ihome,alanguage,counter,type,images,chainid FROM veryzoo_stories ORDER BY sid DESC LIMIT 0,50
+然后在每个记录中执行while循环,以便在每个帖子中找到主题的加工名称:
while(..){ SELECT topicname FROM veryzoo_topics WHERE topicid ='$ topic'“ .... }
的 +立即 我将使用内部加入来加速进程,但是我的测试需要更长的时间从1.5秒到3.5秒
选择a.sid,a.aid,a.title,a.time,a.topic,a.informant,a.ihome,a.alanguage,a.counter,a.type,a.images,a。 chainid,t.topicname FROM veryzoo_stories a INNER JOIN veryzoo_topics t on a.topic = t.topicid ORDER BY sid DESC LIMIT 0,50
看起来内连接都是从两个桌面拳头连接200k记录然后将结果限制在50 ..这需要很长时间..
请帮我指点一下这样做.. 例如,从表1中获取最后50条记录..然后将其加入表2 ..等
答案 0 :(得分:0)
不使用内部联接,除非两个表共享相同的主键,否则您将获得重复的值(当然,查询速度较慢)。
答案 1 :(得分:0)
我只是对嵌套查询+内连接进行测试,并且惊讶于性能提高了很多:它现在只用了0.22秒。这是我的疑问:
SELECT a.*, t.topicname
FROM (SELECT sid, aid, title, TIME, topic, informant, ihome, alanguage, counter, TYPE, images, chainid
FROM veryzoo_stories
ORDER BY sid DESC
LIMIT 0, 50) a
INNER JOIN veryzoo_topics t ON a.topic = t.topicid
如果没有更多解决方案出现,我可以使用这个...感谢任何人看这篇文章
答案 2 :(得分:0)
请试试这个:
SELECT *
FROM (
SELECT a.sid, a.aid, a.title, a.time, a.topic, a.informant, a.ihome, a.alanguage, a.counter, a.type, a.images, a.chainid
FROM veryzoo_stories a
ORDER BY sid DESC
LIMIT 0 , 50
)b
INNER JOIN veryzoo_topics t ON b.topic = t.topicid
我做了一个小测试,似乎更快。它使用子查询(嵌套查询)首先选择50条记录,然后加入。
还要确保veryzoo_stories.sid,veryzoo_stories.topic和veryzoo_topics.topicid是索引(如果使用InnoDB,则存在关系)。它应该提高性能。
现在它留下了ORDER BY LIMIT的问题。它很重,因为它在选择之前订购了200,000条记录。我想这是必要的。使用ORDER BY时,索引非常重要。
以下是有关此问题的文章:ORDER BY … LIMIT Performance Optimization