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试一试 |