我将尝试访问记录,但会使用如下语法排除具有 id 列表的记录:
WHERE id NOT IN (1,3,4,6,7, ...
随着我的数据库变大,ID 列表也会变大。有一天我会遇到问题吗?
考虑将要排除的 id 列表存储在不同的表中,然后使用以下 SQL:
WHERE id NOT IN (select id from excluded_ids);
id
在列上放置索引以excluded_ids
实现可伸缩性。
根据您声明的需要,我通常倾向于避免在这种情况下使用长列表,它需要一个单独的表和一个子选择。
从MySQL 手册:
IN 列表中值的数量仅受 max_allowed_packet 值的限制。
因此检查max_allow_packet值,以确保一旦此列表变得非常大,您的语句不会中断。
我刚刚在我自己的数据库上运行了一个测试——它有大约 800 万行,我排除了其中大约 10 行。运行时间为 25 秒。我认为这意味着它不可扩展;)