2012-03-06 2 views
2

난 이렇게되면 쿼리가 있습니다MySQL의 왼쪽 가입 및 NULL IS

SELECT * 
FROM table_a 
LEFT JOIN table_b ON table_a.id_a = table_b.id_a 
WHERE 
table_b.field = 'something' OR table_b.field IS NULL 

내가 table_b에는 레코드가 프로그래머없는 곳에 table_b.field = '뭔가'또는 사람과 기록을 갖고 싶어 table_a에있는 행. IS NULL을 추가하면 쿼리없이 약 0.4 초가 걸립니다.

누구든지이 동작을 설명 할 수 있습니까? IS NULL은 일부 최적화를 거부하지만 완전히 확신하지는 않는다고 생각합니다.

답변

1

Table_b의 필드에 대한 색인이 있습니까? 연결 인덱스에 있으면 첫 번째 인덱스인지 확인하십시오.

+0

실제로 왼쪽 결합은 데이터가 null 일 때 데이터를 받도록합니다. table_b.field = 'something'을 조인으로 이동해야합니다. –

+0

사실, 왼쪽 조인을 사용하면 데이터가 null 일 때 데이터를 얻을 수 있습니다. table_b.field = 'something'을 조인으로 이동해야합니다. SELECT * table_a 에서 왼쪽이는 속도를 회복 인덱스와 table_a.id_a = table_b.id_a 및 table_b.field ON table_b = 아니라 '뭔가' –

+0

, 예를, 가입,하지만 난 여전히이 – Jarry