我想执行以下操作:
delete from images where image_address not in (<a long list>)
此列表可以使用多长时间? (我猜我可能要考虑另一种方式)。
答案 0 :(得分:1)
如果你有一个很长的清单,我建议采用两种方法:
第一个解决方案:
将所有数据添加到临时表:
CREATE TEMP TABLE lng_list(image_address);
-- Insert all you elements in lng_list table
-- ...
DELETE FROM images WHERE image_address NOT IN (SELECT image_address FROM lng_list);
确保使用此内部事务以获得良好的性能。
第二个解决方案:
(已删除:仅适用于IN
,而不适用于NOT IN
...)
对于任何这些解决方案,性能应该是公平的。
答案 1 :(得分:1)
如果您使用参数(?
),the maximum number is 999 by default。
如果通过直接插入值来动态创建SQL语句(这对字符串来说是一件坏事),这样的列表的长度没有上限。但是,有a limit on the length of the entire SQL statement,默认为一百万字节。
如果您不能保证您的查询不超过这些限制,您必须使用临时表(请参阅LS_dev的答案)。