不久前,我在這裏問了一個問題,以找出在網站的每個部分中通過評論數量排列用戶的最佳方式。如果您想知道案件是什麼,請點擊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秒被緩存? –