내가 MySQL의에 절하지 최적화하기 위해 노력했다 : sent_question
테이블과 word
테이블 사이에 관계가 없습니다최적화 MySQL의 NOT 임시 변수
SELECT @i:=(SELECT correct_option_word_id FROM sent_question WHERE msisdn='abc');
SELECT * FROM word WHERE @i IS NULL OR word_id NOT IN (@i);
: 나는 다음과 같은 쿼리에서 결국 어떻게 일부 . 또한 색인을 correct_option_word_id
에 둘 수 없습니다.
누군가가 설명해주십시오.이 방법으로도 쿼리를 최적화 할 수 있습니까?
업데이트 : here과 같이 NOT IN과 LEFT JOIN/IS NULL의 두 가지 방법이 거의 똑같이 효율적이라는 점을 언급했습니다. 그래서 LEFT JOIN/IS NULL 메서드를 사용하고 싶지 않습니다.
업데이트 2 : 원래 쿼리에 대한 설명 결과 :
EXPLAIN SELECT * FROM word WHERE word_id NOT IN (SELECT correct_option_word_id FROM sent_question WHERE msisdn='abc');
+----+--------------------+---------------+------+-------------------------+-------------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------------+------+-------------------------+-------------------------+---------+-------+------+-------------+
| 1 | PRIMARY | word | ALL | NULL | NULL | NULL | NULL | 10 | Using where |
| 2 | DEPENDENT SUBQUERY | sent_question | ref | fk_question_subscriber1 | fk_question_subscriber1 | 48 | const | 1 | Using where |
+----+--------------------+---------------+------+-------------------------+-------------------------+---------+-------+------+-------------+
'sent_question'과'word' 사이에 관계가 있습니까? 원래 검색어는 무엇입니까? –
@MarcusAdams'sent_question' 테이블과'word' 테이블 사이에 관계가 없습니다. 또한'correct_option_word_id'에 인덱스를 둘 수 없습니다. –
원본 쿼리에 대해'EXPLAIN' 결과를 보여주십시오. –