【发布时间】:2019-03-31 22:50:09
【问题描述】:
我有一个 SQLite 数据库,我在其中执行类似
的查询 Select * from table where col_name NOT IN ('val1','val2')
基本上,我从服务器获取大量值,我需要选择给定列表中不存在的值。
目前它工作正常,没有问题。但是随着服务器数据库的频繁更新,来自服务器的值的数量变得巨大。
所以,我可能会得到数千个字符串值,我需要将它们传递给NOT IN
我的问题是,它会在未来引起任何性能问题吗? NOT IN 参数是否有大小限制? (比如最多可以检查 10000 个值)?
它会在某个时候导致任何崩溃吗?
【问题讨论】:
-
在 MySQL 中,有一个数据包大小限制。这些 NOT IN 值来自哪里?如果他们来自另一张桌子;您可能会想到基于 Join/Subquery 的方法;这样没有限制会影响您的情况
-
IN() 中的列表越大越慢。大多数 SQL 优化器将
IN列表转换为OR并且倾向于以这种方式工作。如果值按顺序排列,你会更好关闭使用column > value and column < value或column between value and value
标签: android mysql sqlite android-sqlite