2015-01-14 2 views
0

을 완료하지 않습니다. Wordnet는 MySQL의 문은 내가 여기에서 워드 넷 SQL 데이터베이스를 사용하고

나는 단어의 동의어를 찾으려고 노력하고있어이 페이지의 하단에있는 두 개의 예를 들어 문을 사용하려고 노력 해요 : http://wnsqlbuilder.sourceforge.net/sql-links.html

SELECT synsetid,dest.lemma,SUBSTRING(src.definition FROM 1 FOR 60) FROM wordsXsensesXsynsets AS src INNER JOIN wordsXsensesXsynsets AS dest USING(synsetid) WHERE src.lemma = 'option' AND dest.lemma <> 'option'

SELECT synsetid,lemma,SUBSTRING(definition FROM 1 FOR 60) FROM wordsXsensesXsynsets WHERE synsetid IN (SELECT synsetid FROM wordsXsensesXsynsets WHERE lemma = 'option') AND lemma <> 'option' ORDER BY synsetid

을하지만, 그들은 결코 완성. 합리적인 시간 내에 적어도 나는 모든 쿼리를 취소해야했습니다. 다른 모든 쿼리는 제대로 작동하는 것처럼 보입니다. 두 번째 SQL 예제를 분해하면 합리적인 시간 (약 0.40 초) 동안 작업하고 완료 할 수 있습니다.

그러나 전체 구문을 실행하려고하면 MySQL 명령 행 클라이언트가 멈 춥니 다.

이 구문에 문제가 있습니까? 왜 그렇게 오래 걸릴까요?

편집 :의

출력 "SELECT를 EXPLAIN ..."의

Explain Select Output

출력 "... EXTENDED EXPLAIN; SHOW 경고;"

Show Warnings Output

+0

쿼리에 대한 MySQL 액세스 계획, MySQL이 고려중인 인덱스 및 인덱스 사용 여부와 MySQL의 행 수를 보려면'EXPLAIN SELECT ... '를 실행하는 것이 좋습니다. 'EXPLAIN EXTENDED ...'다음에'SHOW WARNINGS'를 사용하여 MySQL이 쿼리 텍스트로 무엇을하는지 자세히 볼 수 있습니다. – spencer7593

+0

@ spencer7593 제안한 명령의 결과를 추가했습니다. 경고가 1 개 표시됩니다. – Arcana

답변

0

좀 더 파고를하고 사용되는 다양한 문으로보고 문제가 IN 명령에 있었다 발견했다.

MySQL은 데이터베이스의 모든 단일 행에 대한 명령문을 반복합니다. 이것은 수십만 건의 기록을 거쳐야했기 때문에 중단의 원인입니다.

이 문제를 해결하려면 먼저 명령을 두 개의 별도 데이터베이스 호출로 분리하고 synset을 가져온 다음 바인드 된 SQL 문자열을 동적으로 만들어 synset의 단어를 찾습니다.

관련 문제