나는 다음과 같은 쿼리가 :MySQL의 간단한 쿼리 최적화
SELECT
b.item_name,
COUNT(distinct c.user_id) AS total_count,
AVG(c.item_rating) AS avg_rating
FROM item_ratings as c
INNER JOIN items AS b ON b.item_id = c.item_id
INNER JOIN users AS u ON u.user_id = c.user_id
WHERE item_active = 1 AND u.user_valid = 1
GROUP BY c.item_id
이 쿼리는 고도로 최적화 된 데이터베이스를 500 초 동안 실행 - 무슨 일이 일어나고 있는지 확실하지합니다.
Indexs
item_ratings - item_user_id, (item_id, user_id), item_rating, item_id
users - user_id, user_valid
items - item_id (primary), item_search (item_id, item_name), item_r (parent_id, item_id, item_active)
테이블 크기
가까운 500 만 개 기록에 item_ratings 테이블, 항목 테이블이 약 200K이며, 사용자가 약 25 만된다.
이 쿼리를 설명한다고 설명 item_active에 인덱스가 있더라도, (모든 200K 행을 반환) 항목의 테이블 정렬을 할 것으로 보인다. 다른 테이블 (item_ratings 및 user)은 모두 올바른 색인을 사용합니다. FULL UPDATES
는
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE b ALL PRIMARY,item_id, item_search, item_r NULL NULL NULL 218419 Using where; Using temporary; Using filesort
1 SIMPLE c ref item_user_id ,user_id, item_id 4 myDB.b.item_id 29 Using where
1 SIMPLE u eq_ref PRIMARY,user_valid,user_id PRIMARY 4 myDB.c.user_id 1 Using where
하드웨어 우분투 10.10 실행 이이 전용 MySQL 서버 상자, RAM의 오순절 16기가바이트을 설명한다. 테이블에 MyISAM이 실행 중입니다.
제안 사항?
실제'EXPLAIN' 출력을 게시하십시오 ... – Wrikken
설명 출력 생성 누락, 생성 테이블 출력 누락, 저장 엔진 정보 누락, 저장 엔진 구성 변수 누락, 실행중인 하드웨어 - 누락 된 정보. 너무 많은 정보가 없으면 어떤 종류의 대답을 줄 수 있는지 실마리가 없습니다. –
이 문제를 해결해 주셔서 죄송합니다. – gregavola