sqlite`not in`参数有大小限制吗?

vshtjzan  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(718)

我有一个sqlite数据库,在这里执行如下查询

Select * from table where col_name NOT IN ('val1','val2')

基本上,我从服务器上得到一个巨大的值列表,我需要选择给定列表中不存在的值。
目前其工作正常,无问题。但是,随着服务器数据库的频繁更新,来自服务器的值的数量变得非常庞大。
所以,我可能会得到成千上万的字符串值,我需要传递给 NOT IN 我的问题是,它会不会导致任何性能问题在未来?是吗 NOT IN 参数有大小限制吗(比如你能查到的最大10000个值)?
它会不会在某个时候引起车祸?

wmomyfyw

wmomyfyw1#

这是关于sqlite中各种限制的官方参考。我认为sql语句的最大长度可能与您的情况有关。默认值为1000000,可调。
除此之外,我不认为参数的数目有任何限制 NOT IN 条款。

sr4lhrrt

sr4lhrrt2#

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

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 相反。

相关问题