2010-12-10 8 views
0

mysql을 사용하는 법을 배우고 있습니다. 그래서 몇 가지 문제가 있습니다.MySQL 쿼리가 레코드 검색을 위해 최적화되었습니다!

난 세 테이블을 가지고 users movie and movie watching history(moviewh)

movie 테이블의 구조는 다음

movie_id[key] movie_title 

users이다

user_id[key] user_name 

및 moviewh이다 :

user_id[key] movie_id[key] watching_date[key] 
,174,

내 SQL 쿼리는 다음과 같습니다 그래서

EXPLAIN 
SELECT m.movie_id,m.movie_name_cn FROM movie AS m 
LEFT JOIN moviewh AS mwh 
ON m.movie_id = mwh.movie_id 
WHERE date_format(mwh.watching_date,'%Y-%m-%d') = '2010-11-01' AND mwh.user_id = 1 

alt text

. 어떻게하면 테이블과 쿼리를 최적화 할 수 있습니까 ??

답변

1

사용자가 특정 날짜에 본 영화를 보는 데 관심이있는 경우 왜 왼쪽 참여를하고 있습니까? 사용자가 DB에 존재하지 않는 영화를 본 수 물론 가정

SELECT m.movie_id,m.movie_name_cn 
FROM movie AS m, moviewh AS mwh 
WHERE m.movie_id = mwh.movie_id 
     AND date_format(mwh.watching_date,'%Y-%m-%d') = '2010-11-01' 
     AND mwh.user_id = 1 

...

+0

내가 찾은 검색 결과 여전히 루프보고 EXPLAIN! moviewh의 모든 레코드 타입은 "ALL" – qinHaiXiang

+0

저는 Mysql에 처음 왔습니다. 나는 발견 한 것을 배우고 싶습니다! – qinHaiXiang

+0

'moviewh'는 합성 색인을 가지고 있습니까? '(col1, col2, col3)'에 3 개의 컬럼 인덱스가있는 경우,'(col1)','(col1, col2)','(col1, col2, col3)'의 검색 기능을 인덱스화할 수 있습니다. 그래서'mwh.watching_date'에 대한 where 절을 제거하고 ... –

관련 문제