2016-10-19 4 views
-1
select mobile_no,mobile_source_type_id,voter_id,district_id, 
     constituency_id,tehsil_id,local_election_body_id,panchayat_id, 
     booth_id,is_dnd 
    from mobile_numbers2 
    where mobile_no not in (
     SELECT mobile_number 
      from mobile_numbers 
          ) 

Для этого запроса требуется больше времени.Как оптимизировать этот запрос

Используя запрос Explain. Он показывает ниже сообщение, Как оптимизировать этот запрос.

id select_type table type possible_keys key key_len ref rows Extra 
1 PRIMARY mobile_numbers2 ALL NULL NULL NULL NULL 7783355 Using where 
2 DEPENDENT SUBQUERY mobile_numbers index idx_mobile_numbers_mobile_number,idx_mobile_no idx_mobile_numbers_mobile_number 48 NULL 49256693 Using where; Using index 
+0

Добавить индекс в поле mobile_numbers2.mobile_no. Вы также можете рассмотреть вопрос о переписывании запроса в качестве соединения, а не в подзапросе. – Shadow

+0

Вы пытались использовать JOIN вместо размещения подзапроса в предложении WHERE? – DouglasCamargo

ответ

0

, поскольку у меня нет базы данных в моем распоряжении, я не в состоянии проверить этот вопрос, так что, возможно, потребуется перенастройка, но это может быть быстрее:

select 
    mobile_no as mobile_no1, 
    mobile_numbers.mobile_number as mobile_no2, 
    mobile_source_type_id, 
    voter_id, 
    district_id, 
    constituency_id, 
    tehsil_id, 
    local_election_body_id, 
    panchayat_id, 
    booth_id, 
    is_dnd 
from mobile_numbers2 
    left join mobile_numbers on mobile_numbers.mobile_number = mobile_numbers2.mobile_no 
where mobile_no2 IS NULL 

несколько примечаний:

подзапросов, особенно когда в паре с «IN()» медленно

если я поддерживать вашу базу данных, я хотел бы создать в ingle 'mobile_numbers', и я бы ссылался на нее из всех других таблиц, используя столбец «id», это сделало бы вещи чище/быстрее в целом.

+0

Привет, Можете ли вы объяснить, как оптимизировать запрос из команды EXPLAIN. – Mohan

+0

Я не использую EXPLAIN много, но я считаю, что он может только сказать вам, где добавлять индексы в таблицы, а не как переписать синтаксис. У MySQL есть документация по теме: http://dev.mysql.com/doc/refman/5.7/en/using-explain.html – denodster

Смежные вопросы