|  |      1xiaogui      2015-01-08 15:51:36 +08:00 查看 g_re_enterprises_types 表和 g_enterprises_certificate 表数据量,以及表中 enterprise_id 字段是否有索引? | 
|  |      5msg7086      2015-01-08 16:14:56 +08:00 via iPhone 不贴个EXPLAIN? | 
|  |      6iamshaynez      2015-01-08 16:32:29 +08:00 查看执行计划吧,认为执行计划已经比较高效,那么瓶颈基本上就在硬件上了。23w * 4+ 次执行的速度不是单靠优化SQL能解决的。 求教MSSQL用exists替换in能改善性能吗?Oracle是明显改善的,尤其是10以前的版本。 | 
|      7huwsun      2015-01-08 16:44:58 +08:00 考虑批量执行 | 
|      8omegaga      2015-01-08 17:02:48 +08:00 @iamshaynez exists和in的性能比较要看比较吧。如果你指的是 SELECT * FROM A WHERE EXISTS ( SELECT * FROM B WHERE A.id = B.id ) 和 SELECT * FROM A WHERE A.id IN ( SELECT id FROM B ) 的话,通常来说是没有明显的区别的(execution plan是一样的)。 不过老的版本里IN会被翻译成一串OR。。。。。。那个性能就不能直视了 | 
|  |      10branchzero      2015-01-08 17:46:24 +08:00 可以考虑先把所有ID查出来汇总到一块儿去重,然后一次性喂DELETE? | 
|      11yuankui      2015-01-08 20:25:45 +08:00 1. 那里来的update? 2. 这种语句在什么场景下执行?每个请求一次?每天一次?如果每天一次,几秒都是可以接受了,在怎么优化有没有多大收效 3. 有些东西不是单单通过优化sql可以解决的,换个思路。比如把数据全部dump出来,然后分析,然后再喂回去。某些场景下效率会高很多。 | 
|  |      12mkeith      2015-01-08 20:26:24 +08:00 2个表的数据量不一样吧? | 
|      13jc4myself      2015-01-09 00:39:59 +08:00 via iPad 看一下开查询缓存没,或者执行两次同一条select | 
|  |      14thinkmore      2015-01-09 09:54:37 +08:00 DELETE FROM g_re_enterprises_types WHERE enterprise_id exists ( SELECT id FROM g_enterprises WHERE enterprise_name = '广东百合医疗科技股份有限公司' ); 我们几百万上千万数据都很快出来,你的为什么会这么慢呢?你explain试一试 |