
1 xiaogui 2015-01-08 15:51:36 +08:00 查看 g_re_enterprises_types 表和 g_enterprises_certificate 表数据量,以及表中 enterprise_id 字段是否有索引? |
5 msg7086 2015-01-08 16:14:56 +08:00 via iPhone 不贴个EXPLAIN? |
6 iamshaynez 2015-01-08 16:32:29 +08:00 查看执行计划吧,认为执行计划已经比较高效,那么瓶颈基本上就在硬件上了。23w * 4+ 次执行的速度不是单靠优化SQL能解决的。 求教MSSQL用exists替换in能改善性能吗?Oracle是明显改善的,尤其是10以前的版本。 |
7 huwsun 2015-01-08 16:44:58 +08:00 考虑批量执行 |
8 omegaga 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。。。。。。那个性能就不能直视了 |
10 branchzero 2015-01-08 17:46:24 +08:00 可以考虑先把所有ID查出来汇总到一块儿去重,然后一次性喂DELETE? |
11 yuankui 2015-01-08 20:25:45 +08:00 1. 那里来的update? 2. 这种语句在什么场景下执行?每个请求一次?每天一次?如果每天一次,几秒都是可以接受了,在怎么优化有没有多大收效 3. 有些东西不是单单通过优化sql可以解决的,换个思路。比如把数据全部dump出来,然后分析,然后再喂回去。某些场景下效率会高很多。 |
12 mkeith 2015-01-08 20:26:24 +08:00 2个表的数据量不一样吧? |
13 jc4myself 2015-01-09 00:39:59 +08:00 via iPad 看一下开查询缓存没,或者执行两次同一条select |
14 thinkmore 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试一试 |