2013-10-19 2 views
0

다음은 mySQL 쿼리입니다. 문제는 우리가이 주제 전에 텍스트 'ID'를 추가 할 수 있습니다 content.ID LIKE theme.ref을 말한다 곳은 첫 번째 링크에mySQL JOIN 변수에 텍스트 추가

SELECT * FROM content LEFT JOIN theme ON content.ID LIKE theme.ref 
WHERE content.status = 1 AND content.parent = 11 AND content.type = 'team' 
ORDER BY content.position ASC 

을 일치하도록하기 위해 theme.ref에 접두사와 접미사를 추가 할 필요가 있다는 것입니다. ref 다음에 ','. 이 작업을 수행 할 수 있습니까?

예 : 'ID'.theme.reg.',' 분명히 작동하지 않습니다.

을하지만 쿼리가 비효율적 인 것 (theme.ref 와일드 카드 문자를 포함하지 않는 경우 content.ID = concat('ID',theme.ref,',')의 것과 동일)

답변

0

content.ID LIKE concat('ID',theme.ref,',') . 아마도 다시 작성해야하거나 전체 데이터 모델이 변경되어야합니다.

+0

구조를 다시 작성할 필요가 없도록 구조를 다시 작성합니다. 나는 그것이 연결 때문에 천천히 걸린다. 그리고 JOIN 때문에가 아니냐? –

+0

조인 술어에서 concat 사용으로 인해 비효율적 일 수 있습니다. 이러한 조인 조건을 사용하면 MySQL 엔진이 최적의 쿼리 플랜을 선택할 수있는 방법을 크게 제한합니다. –

+0

a에서 b 로의 중첩 루프 (bx에서 인덱스 사용), b에서 a 로의 중첩 루프 (ax 인덱스 사용), 해시 조인 및 정렬 (자연스러운 조인이라고 함)은 ax = bx 조인 -merge join - RDBMS는 어떤 것을 선택하고 최적의 계획을 세울 수 있습니다. Join on a.x = F (b.x)는 좀 더 제한적입니다. F (b.x)에 인덱스를 가질 수 없기 때문에 b에서 a까지의 중첩 루프에서만 수행 할 수 있습니다 (a.x의 인덱스 사용). 대개 해시 조인과 정렬 - 병합 조인은 구현하기 어려우므로 대부분의 RDBMS에서이를 적용하지 못합니다. –