日期:2014-05-17  浏览次数:20914 次

不解的现象:批量更新某字段后,查询的where中包含此字段则非常缓慢
背景:km_cmdoc_main这张表,有11w的数据,3天前,我执行了下面两条语句,更新了所有数据:

update km_cmdoc_main set fd_delete_type = '02'; 
update km_cmdoc_main set fd_enter_system = '02';


现象:

select *
  from (select m.*
          from km_cmdoc_main m
         inner join (select distinct fd_cmdoc_id
                      from km_cmdoc_review_handler
                     where fd_company_id =
                           '139dc1399ef69959cd4e0a14395a3f8e') h
            on m.fd_id = h.fd_cmdoc_id
        union all
        select mau.*
          from km_cmdoc_auth au
         inner join km_cmdoc_main mau
            on au.doc_creator_company_id = mau.doc_creator_company_id
         where au.fd_auth_id = '139dc23f04c6385c52ab1724864a9a121b')
 where doc_status <> '10'
   and fd_enter_system <> '02'
   and fd_delete_type <> '02'

1.执行上面的sql语句,反复试了许多次,十几分钟都执行不完。请问是什么原因?
2.修改上面的sql,where语句换成这样:where doc_status <> '10,其他不变,则非常快
3.如果不用union,只单表查询,则非常快:
select *
  from km_cmdoc_main
 where doc_status <> '10'
   and fd_enter_system <> '02'
   and fd_delete_type <> '02'

------解决方案--------------------