SQLite的“ NOT IN”参数是否有大小限制?

时间:2018-10-27 10:58:17

标签: android mysql sqlite android-sqlite

我有一个SQLite数据库,在其中执行

这样的查询
  Select * from table where col_name NOT IN ('val1','val2')

基本上,我从服务器获取了大量的值列表,我需要选择给定列表中不存在的值。

目前可以正常使用,没有问题。但是,随着服务器数据库的频繁更新,来自服务器的值数量变得巨大。

因此,我可能会获得成千上万个需要传递给NOT IN

的String值。

我的问题是,将来会不会引起性能问题? NOT IN参数有大小限制吗? (例如您可以检查的最大10000个值)?

在某个时候会导致崩溃吗?

2 个答案:

答案 0 :(得分:2)

这是an official reference关于sqlite中的各种限制。我认为 SQL语句的最大长度可能与您的情况有关。默认值为1000000,并且可以调整。

除此之外,我认为NOT IN子句的参数数量没有任何限制。

答案 1 :(得分:1)

要测试的值不只几个,最好将它们放在一个表中,该表在容纳它们的列上有一个索引。然后像

SELECT *
FROM table
WHERE col_name NOT IN (SELECT value_col FROM value_table);

SELECT *
FROM table AS t
WHERE NOT EXISTS (SELECT 1 FROM value_table WHERE value_col = t.col_name);
不管value_table中有多少记录,

都将是相当有效的,因为该索引将用于查找条目。

此外,当然,它使重用已准备好的语句变得容易得多,因为您不必创建一个新语句并重新绑定每个值(您正在使用已准备好的语句对这些值使用占位符,是对的,是不是不尝试将其内容内联到字符串中?)每次将值添加到需要检查的值时。您只需将其插入value_table中即可。