也许这有点傻,但我只是不确定哪种更好。如果我必须在db中检查超过10k行才能存在,我该怎么办?
#1 -一个查询
select id from table1 where name in (smth1,smth2...{till 30k})#2 -多个查询
select id from table1 where name=smth1虽然,性能不是目标,但我也不想使用mysql ;)也许,任何其他解决方案都会更适合……谢谢。
更新:任务是获取域名列表,保存新的(还不在数据库中),并删除列表中显示的域名。希望,这会有一点帮助..。
发布于 2010-04-27 02:24:45
您应该做的是创建一个临时表,插入所有的名称,并(使用一个查询)为您的select连接这个表。
select id
from table1 t1
inner join temptable tt on t1.name = tt.name发布于 2010-04-27 02:25:29
单个查询很可能会执行得更好,因为第二个查询会产生大量的往返延迟。但是,如果您有许多名称,如示例中的名称,则第一个方法可能会导致达到内部限制。
在这种情况下,最好将姓名列表存储在一个临时表中并与其连接。
发布于 2010-04-27 02:53:58
根据您将来需要做类似的事情,您可能想要在数据库'strlist_ to _table‘中添加一个函数。让函数获取一个文本,其中您的输入由分隔符分隔(也可能传递给函数),在分隔符上拆分它以创建动态表格。然后你就可以使用
where in strlist_to_table('smth1|smth2', '|')还可以防止sql注入(可能会在输入中出现小的波比表)。
就我的两分钱……
https://stackoverflow.com/questions/2715848
复制相似问题