我将尝试访问记录,但会使用如下语法排除包含ID列表的记录:
WHERE id NOT IN (1,3,4,6,7, ...
随着我的数据库变大,id列表也会变大。我有一天会遇到问题吗?
答案 0 :(得分:3)
考虑将要列出的id列表存储在另一个表中,然后使用以下SQL:
WHERE id NOT IN (select id from excluded_ids);
在id
的{{1}}列上添加一个索引,用于scalabilty。
答案 1 :(得分:2)
根据您的陈述的需要,我通常倾向于在这种情况下避免长的值列表,它会为一个单独的表和一个子选择而大喊。
来自MySQL manual:
IN列表中的值数量仅受限于 max_allowed_packet值。
因此,请检查max_allow_packet值,以确保一旦此列表变得非常大,您的语句就不会中断。
答案 2 :(得分:0)
我刚刚对自己的数据库进行了测试 - 它有大约800万行,我排除了其中的大约10行。跑了25秒。我认为这意味着它不可扩展;)