단어 목록에서 하위 문자열 데이터베이스를 생성했습니다. 나는 일부 입력 단어가있는 하위 문자열을 공유하는 모든 단어를 검색하기 위해 비교를 수행하고 있습니다.MySQL 자체 조인 쿼리 최적화
'word_substrings'데이터베이스 형식과 예 (단어 '당황'에 대한) 다음 'word_id이'단어의 테이블에있는 단어의 핵심이다
id (primary key), word_id (Foreign Key), word_substring (char(3))
30 4 " a"
31 4 " ab"
32 4 "aba"
33 4 "bac"
34 4 "ack"
35 4 "ck "
36 4 "k "
.
나는 동등성을 시도했다 :
select distinct t1.word_id
from word_substrings t1, word_substrings t2
where t1.word_substring = t2.word_substring
and t2.word_id = [some word_id]
뿐만 아니라 테이블
가입 :select distinct t1.word_id
from word_substrings as t1
join word_substrings as t2
on t1.word_substring = t2.word_substring
where and t2.word_id = [some word_id]
그러나 두 쿼리 결과를 반환하도록 약 10 초 정도 걸립니다.
word_substrings 테이블과 word_substrings 테이블이 모두 변경 될 수는 있지만 데이터는 매우 정기적으로 검색되므로 쿼리 시간을 개선하는 데 도움이되는보기를 만들었습니다. 그러나 나는 돌아 오는 시간에 명목상의 변화가 없음을 알았다.
내 단어 목록은 현재 40k 행이고 하위 문자열 목록은 약 400k 행입니다.
쿼리를 최적화하거나 반환 시간을 개선하기 위해 데이터베이스를 다시 포맷하는 방법에 대한 아이디어가있는 사람이 있습니까?
가능한 모든 하위 문자열을 나타내는 열이 있고 해당 열에 각 단어를 등록하는 테이블을 생성하는 것을 고려해 보았습니다. 그러나 어떻게 작동하는지 잘 모릅니다.
귀하의 모든 도움에 감사드립니다. 포함시키지 않은 정보가있는 경우 해당 데이터를 검색해 드리겠습니다.
참고 : 관련 정보는 장고 웹 응용 프로그램을위한 것입니다.
테이블에 'word_substring'및 'word_id' 열에 대한 색인이 있습니까? 'word_substring' 컬럼에 대한 데이터 정렬이란 무엇입니까? – danihp