2009-07-02 152 views
1

鉴于类似下面的查询:限制查询

DELETE FROM FOO WHERE ID in (1,2,3,4,....); 
  • 是否有一个上限值的纳入有多少? (我见过Oracle抱怨1000,但那是很久以前的事了,我不知道这是依赖于安装还是依赖于oracle的版本等等,或者mysql如何限制它。什么是性能问题?难道是更快的设定值的分成更小的子集,并发送多个删除请求?

回答

4

the docs

IN列表中的值数量仅受限于max_allowed_packet值。

至于性能,我会分解查询时,他们开始接近千位ID左右。 IN是非常优化的,但它似乎没有任何好处可以来扔它巨大的名单。

2

如果你想确保你的发言总能工作,把它们放在一个temp表并做IN语句反对它

+0

这到底会如何呢? “删除从FOO WHERE ID在bar.id;”? – Thomas 2009-07-02 15:30:46

+1

从FOO删除哪里ID(从酒吧选择ID) – 2009-07-02 15:32:48