Android SQLite`NOT IN`参数是否有任何大小限制?

Android SQLite`NOT IN`参数是否有任何大小限制?,android,mysql,sqlite,android-sqlite,Android,Mysql,Sqlite,Android Sqlite,我有一个SQLite数据库,在其中执行如下查询 Select * from table where col_name NOT IN ('val1','val2') 基本上,我从服务器得到一个巨大的值列表,我需要选择在给定列表中不存在的值 目前它工作正常,没有问题。但是,随着服务器数据库的频繁更新,来自服务器的值的数量变得巨大 因此,我可能需要将数千个字符串值传递给而不是 我的问题是,它将来会不会导致性能问题?不在参数中是否有任何大小限制?(比如最多可以检查10000个值) 它会在某个时候导

我有一个SQLite数据库,在其中执行如下查询

  Select * from table where col_name NOT IN ('val1','val2')
基本上,我从服务器得到一个巨大的值列表,我需要选择在给定列表中不存在的值

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

因此,我可能需要将数千个字符串值传递给
而不是

我的问题是,它将来会不会导致性能问题?
不在
参数中是否有任何大小限制?(比如最多可以检查10000个值)

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

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


除此之外,我认为不在
子句中的
参数的数量不存在任何限制。

如果要测试的值不止几个,最好将它们放在一个表中,该表在包含它们的列上有一个索引。然后像

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

无论
value\u表中有多少条记录
都将相当有效,因为该索引将用于查找条目


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

在MySQL中,存在数据包大小限制。这些价值观以外的东西从何而来?如果他们来自另一张桌子;您可能会想到基于连接/子查询的方法;因此,没有限制会影响您的案例in()中的列表越大,速度就越慢。。大多数SQL优化器将
列表中的
转换为
,并倾向于以这种方式工作。。如果值是按顺序排列的,最好使用
column>value和column
column-between-value和value
非常确定它是由语句的最大长度决定的。在某些情况下,性能会非常糟糕,因为解析一个巨大的语句需要大量的处理时间。
SELECT *
FROM table AS t
WHERE NOT EXISTS (SELECT 1 FROM value_table WHERE value_col = t.col_name);