1

我将尝试访问记录,但会使用如下语法排除具有 id 列表的记录:

WHERE id NOT IN (1,3,4,6,7, ...

随着我的数据库变大,ID 列表也会变大。有一天我会遇到问题吗?

4

3 回答 3

3

考虑将要排除的 id 列表存储在不同的表中,然后使用以下 SQL:

WHERE id NOT IN (select id from excluded_ids);

id在列上放置索引以excluded_ids实现可伸缩性。

于 2012-05-15T14:19:52.447 回答
2

根据您声明的需要,我通常倾向于避免在这种情况下使用长列表,它需要一个单独的表和一个子选择。

MySQL 手册

IN 列表中值的数量仅受 max_allowed_pa​​cket 值的限制。

因此检查max_allow_packet值,以确保一旦此列表变得非常大,您的语句不会中断。

于 2012-05-15T14:18:42.210 回答
0

我刚刚在我自己的数据库上运行了一个测试——它有大约 800 万行,我排除了其中大约 10 行。运行时间为 25 秒。我认为这意味着它不可扩展;)

于 2012-05-15T14:15:44.927 回答