내 MySQL의 질의는 다음과 같다 :FIND_IN_SET을 제거하기 위해 쿼리를 다시 작성 하시겠습니까?
SELECT pages.*,
showcase.*,
project.*
FROM pages
INNER JOIN showcase ON showcase.pid = pages.uid AND showcase.deleted != 1
INNER JOIN project ON FIND_IN_SET(project.uid, showcase.projects)
WHERE pages.deleted != 1
AND pages.pid = 14
AND pages.dokType = 150
문제는 제 INNER JOIN
는 - 쉼표 필드 showcase.projects
으로 분리 된리스트로서 쇼케이스 (= 프로젝트 컬렉션)의 프로젝트를 저장하고 있기 때문에 FIND_IN_SET
를 이용한다. FIND_IN_SET
캔트는 내가 아는 한 인덱스를 사용하므로 두 번째 조인에는 프로젝트 테이블의 전체 테이블 스캔이 필요합니다. 데이터베이스 스키마를 변경하지 않고 인덱스를 사용할 수 있습니까?
맞을 것 같아요, 월요일에 데이터를 표준화하기 시작할 것입니다. 확실히 최고의 솔루션. – Max
행운을 비네. 정상화의 최후 순간을 지키지 말자. 그것은 미래의 데이터 문제를 처리/처리 할 수있다. –