내 EXPLAIN
결과가 무엇을 의미하는지 이해하고 가능한 한 최선을 다해이 쿼리와 테이블을 최적화하려고합니다.mySQL - 어떻게 EXPLAIN 결과를 해석하고이 쿼리를 최적화 할 수 있습니까?
쿼리 :
SELECT i.pending,
i.itemid,
i.message,
i.cid,
i.dateadded,
i.entrypoint,
SUM(CASE WHEN v.direction = 1 THEN 1
WHEN v.direction = 2 THEN -1
ELSE 0 END) AS votes,
c.name AS cname,
c.tag AS ctag,
i.userid,
(SELECT COUNT(commentid) FROM `comments` WHERE comments.itemid = i.itemid) AS commentcount,
CASE WHEN NOT EXISTS (SELECT voteid FROM `votes` WHERE votes.itemid = i.itemid AND votes.userid = @userid) THEN '0' ELSE '1' END AS hasVoted,
CASE WHEN NOT EXISTS (SELECT voteid FROM `user_favorites` WHERE user_favorites.itemid = i.itemid AND user_favorites.userid = @userid) THEN '0' ELSE '1' END AS isFavorite
FROM `contentitems` i
LEFT JOIN votes v ON i.itemid = v.itemid
LEFT JOIN `user_favorites` uv ON i.itemid = uv.itemid AND (uv.userid = @userid)
INNER JOIN `categories` c ON i.cid = c.cid
GROUP BY i.itemid
HAVING SUM(CASE WHEN v.direction = 1 THEN 1
WHEN v.direction = 2 THEN -1
ELSE 0 END) > -3 AND i.pending = 0
ORDER BY i.dateadded DESC
(편집 포맷)
설명 결과 :
+----+--------------------+----------------+--------+-------------------------+-------------------------+---------+------------------------+------+-------------------------------------------------------
| id | select_type | table | type | possible_keys key | key_len | ref | rows | Extra |
+----+--------------------+----------------+--------+-------------------------+-------------------------+---------+------------------------+------+------------------------------------------------------+
| 1 | PRIMARY | i | ALL | NULL | NULL | NULL | NULL | 121 | Using temporary; Using filesort |
| 1 | PRIMARY | v | ref | fk_contentitemsitemid_votesitemid | fk_contentitemsitemid_votesitemid | 4 | db33481_mydb.i.itemid | 2 | |
| 1 | PRIMARY | uv | ALL | NULL | NULL | NULL | NULL | 7 | |
| 1 | PRIMARY | c | eq_ref | PRIMARY | PRIMARY | 4 | db33481_mydb.i.cid | 1 | |
| 4 | DEPENDENT SUBQUERY | user_favorites | ALL | NULL | NULL | NULL | NULL | 7 | Using where |
| 3 | DEPENDENT SUBQUERY | votes | ref | fk_contentitemsitemid_votesitemid | fk_contentitemsitemid_votesitemid | 4 | func | 2 | Using where |
| 2 | DEPENDENT SUBQUERY | comments | ALL | NULL | NULL | NULL | NULL | 26 | Using where |
+----+--------------------+----------------+--------+-------------------------+-------------------------+---------+------------------------+------+------------------------------------------------------+
', 1, 0) 근처에 구문 오류가 있습니다. HasVoted, 답변을 업데이트 할 수 있습니까? – barfoon
@ barfoon, 답변이 업데이트되었습니다. 먼저 제거해야했습니다. ")"... – DRapp