我有這個疑問這需要27秒內執行:可以優化此MySQL連接查詢嗎?
SELECT ocal_files.*, count(DISTINCT ocal_favs.username) as favs
FROM ocal_files
INNER JOIN ocal_favs on ocal_favs.clipart_id = ocal_files.id
GROUP BY ocal_files.id
ORDER BY favs DESC
(而不是用戶名應該user_id說明,因爲我有一個用戶表)
ocal_files
有37457行,ocal_favs
有18263
編輯結果的解釋
mysql> EXPLAIN SELECT ocal_files.*, count(DISTINCT ocal_favs.username) as favs FROM ocal_files INNER JOIN ocal_favs on ocal_favs.clipart_i
d = ocal_files.id GROUP BY ocal_files.id ORDER BY favs DESC;
+----+-------------+------------+--------+----------------+---------+---------+---------------------------------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+----------------+---------+---------+---------------------------------+-------+---------------------------------+
| 1 | SIMPLE | ocal_favs | ALL | rlb_clipart_id | NULL | NULL | NULL | 18622 | Using temporary; Using filesort|
| 1 | SIMPLE | ocal_files | eq_ref | PRIMARY | PRIMARY | 4 | openclipart.ocal_favs.clipart_id | 1 | Using where |
+----+-------------+------------+--------+----------------+---------+---------+---------------------------------+-------+---------------------------------+
2 rows in set (0.00 sec)
爲什麼它慢?可以優化嗎?如果是,那麼如何?
您的表是否被索引? –
什麼是執行計劃?有關表格中的索引是什麼? –
你有沒有['ANALYZE'](http://dev.mysql.com/doc/refman/5.1/en/analyze-table.html)?你可以讓MySQL ['EXPLAIN'](http://dev.mysql.com/doc/refman/5.1/en/using-explain.html)查詢嗎? –