2010-04-27 51 views
0

我试图找到一种方法来检查一些ID是否已经在数据库中,如果ID已经在数据库中我自然会尝试避免处理排它代表如何使用单个查询检查多个ID的存在

现在我正在做一个查询来检查ID,但我认为这是过于昂贵的时间,因为如果我检查20 ID的脚本占用30秒

我知道我可以做一个简单的WHERE id = 1或id = 2或id = 3,但我想知道某个组ID是哪个已经在数据库中,哪些不是

我不太了解交易,但也许这可能是有用的或东西

任何想法都非常感谢!

回答

1

取决于你如何确定“的ID集团”

如果你可以用一个查询做到这一点,你可能可以使用连接或存在条款。

例如

SELECT firstname 
    from people p 
    where not exists (select 1 from otherpeople op where op.firstname = p.firstname) 

这将选择所有谁不是在otherpeople表

如果你只是有ID列表中的人,那么WHERE NOT IN(使用1,3,4 ...)

+0

我真的很喜欢这种方法,我怎样才能用我的ID生成一个表格? – perrohunter 2010-04-27 16:59:55

1

对于单个值的20个查询需要30秒很长时间。您是否在ID字段上创建索引来加快速度?

此外,如果您在ID字段上创建​​,则可以插入所有ID。数据库将引发错误并且不会插入那些已经存在的ID,但是您可以忽略这些错误。

+0

是的,的确是ID是主键,如果我尝试你所说的方法并尝试插入所有东西,我仍然在浪费CPU时间来准备将要插入的内容,这是我想避免的事情 – perrohunter 2010-04-27 17:49:56

+0

You无论如何这样做。无论您选择哪种方法,您的SQL服务器都必须在插入之前执行检查。只有当插入的数据量很大时(比如至少以兆字节为单位),准备时间才是一个因素。 – Matijs 2010-04-28 08:36:29