MySQL - 不是(......数以千计的项目......),它会扩展吗?

时间:2012-05-15 14:11:32

标签: mysql database

我将尝试访问记录,但会使用如下语法排除包含ID列表的记录:

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

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

3 个答案:

答案 0 :(得分:3)

考虑将要列出的id列表存储在另一个表中,然后使用以下SQL:

WHERE id NOT IN (select id from excluded_ids);

id的{​​{1}}列上添加一个索引,用于scalabilty。

答案 1 :(得分:2)

根据您的陈述的需要,我通常倾向于在这种情况下避免长的值列表,它会为一个单独的表和一个子选择而大喊。

来自MySQL manual

  

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

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

答案 2 :(得分:0)

我刚刚对自己的数据库进行了测试 - 它有大约800万行,我排除了其中的大约10行。跑了25秒。我认为这意味着它不可扩展;)