나는 2 개의 테이블을 가지고 있습니다.쿼리에서 인덱스를 설정하는 올바른 방법
제 - 테이블 t_games (별명 g)을
column type
g_id mediumint(8)
t_id_1 smallint(5)
t_id_2 smallint(5)
g_team_1 varchar(50)
g_team_2 varchar(50)
g_date datetime
g_live tinyint(3)
차 인덱스는 g_id 필드에 설정하고 (t_id_1, t_id_2, g_date, g_live) 필드에 설정 추가 지수가된다.
초 - 테이블 t_teams (별명 : T1 및 T2)
column type
t_id smallint(5)
t_gw_name varchar(50)
gw_cid tinyint(3)
차 인덱스 t_id 설정된다. 테이블사이
관계는 각 게임에 두 팀이있다
업데이트. 테이블 t_teams에는 팀의 이름이 있습니다. t_games 테이블에서 ID는 t_teams와 관련이 있으며 게임에 참여하는 각 팀의 이름을 검색합니다. 그래서 팀의 이름으로 게임 ID를 retreive합니다 :
SELECT g.g_id, t1.t_gw_name, t2.t_gw_name FROM t_games g
JOIN t_teams t1 ON (g.t_id_1 = t1.t_id)
JOIN t_teams t2 ON (g.t_id_2 = t2.t_id)
내 SQL 쿼리 :
SELECT g_id, t_id_1, t_id_2, g_team_1, g_team_2, g_date, g_live, t1.t_gw_name AS t_gw_name_1, t1.gw_cid AS gw_cid_1, t2.t_gw_name AS t_gw_name_2, t2.gw_cid AS gw_cid_2
FROM t_games g
JOIN t_teams t1 ON (t_id_1 = t1.t_id) JOIN t_teams t2 ON (t_id_2 = t2.t_id)
WHERE g.g_date < "2013-07-24 20:00:00" AND g.g_live < 2`
그리고 이후 내가 얻을 설명 : `
1 SIMPLE g ALL t_id_1 NULL NULL NULL 16 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 2 t_id_1 1
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 2 t_id_2 1`
나는 색인의 많은 조합을 시도 테이블,하지만 난 모든 스캔을 제거 할 수 없습니다.
에 대한 낮은 카디널리티 때문에
작업은 매우 효과적 일 수되지 않습니다 모두 열g_live
에 대한 범위 비교를 가지고 있기 때문에이 작동하지 않습니다? 그리고 다른 테이블은 어떻게 그것과 관련이 있습니까? – Strawberry질문이 업데이트되었습니다. –
확인. 이 모든 열이 정말로 필요합니까? t_id_1 smallint (5) t_id_2 smallint (5) g_team_1 varchar (50) g_team_2 varchar (50) – Strawberry