如何优化此查询

时间:2016-10-19 12:53:50

标签: mysql indexing explain

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

1 个答案:

答案 0 :(得分: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()'配对时很慢

如果我维护你的数据库,我会创建一个单独的移动数据库'我会在其他所有表中使用它来引用它' id'专栏,这将使事情变得更清洁/更快。