不久前,我在这里问了一个问题,以找出在网站的每个部分中通过评论数量排列用户的最佳方式。如果您想知道案件是什么,请点击here。JOIN结构的问题
对我来说,最合适的查询是这一个,它概括了所有的意见在每一个部分,从而使全球排名:
SELECT u.id, u.username, (COALESCE(COUNT(DISTINCT(a.id)),0) + COALESCE(COUNT(DISTINCT(f.id)),0)) AS rank
FROM site_users AS u
LEFT JOIN site_articles_comments AS a ON (a.user_id = u.id)
LEFT JOIN site_forum_comments AS f ON (f.user_id = u.id)
GROUP BY u.id
ORDER BY rank DESC
LIMIT :l
虽然这适合我很好的网站发展的beggining,现在,将超过10万行添加到数据库中,处理如此大量的数据几乎是不切实际的,而不会影响整个网站的加载时间。此外,该查询特别site_articles_comments抛出我关于指标的错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_3a0e6_0.MYI'; try to repair it'
修复表并没有做什么,我相信指标都没有问题,因为我有他们所有的设置:
ALTER TABLE `site_articles_comments`
ADD PRIMARY KEY (`id`),
ADD KEY `user_id` (`user_id`);
我该怎么做才能改善查询并避免这种错误和整体网站滞后?
在此先感谢,
干杯!
但查询仍然发送致命错误消息... –
您是否克服了这个问题? – michaJlS
我可以让索引正常工作,但仍然缺乏性能。我怎样才能让查询每隔10秒被缓存? –