什么是更好 - 查询长期'在哪里'条件或许多小查询?

时间:2010-04-26 18:23:22

标签: php mysql codeigniter

也许这有点愚蠢,但我不确定什么是更好的。 如果我必须在db中查看超过10k行的存在,我会做什么?

#1 - 一个查询

select id from table1 where name in (smth1,smth2...{till 30k})

#2 - 许多查询

select id from table1 where name=smth1

虽然,性能不是目标,但我不想用mysql下载;) 也许,任何其他解决方案都会更合适...... 感谢。

upd:任务是获取域列表,保存新的(尚未在db中)并删除从列表中消失的那些。希望,它会有所帮助...

4 个答案:

答案 0 :(得分:4)

你应该做的是为你的选择创建一个临时表,插入所有名称,以及(使用一个查询)联接此表。

select id 
from table1 t1
inner join temptable tt on t1.name = tt.name

答案 1 :(得分:3)

单个查询很可能表现得更好,因为第二个会产生大量的往返延迟。但是如果您的示例中有很多名称,则第一种方法可能会导致您达到内部限制。

在这种情况下,最好将名称列表存储在临时表中并与之连接。

答案 2 :(得分:1)

根据您将来做类似事情的需要,您可能希望在数据库'strlist_to_table'中添加一个函数。让函数获取一个文本,其中您的输入由分隔符(可能也传递给函数)分隔,将其拆分在分隔符上以创建即时表。然后你可以使用

where in strlist_to_table('smth1|smth2', '|')

并且还可以获得sql注入的保护(输入中可能会出现很少的Bobby Tables)。

只是我的2美分......

答案 3 :(得分:0)

我不确定您的应用程序设计有多灵活,但是可能值得考虑完全删除分隔列表并简单地创建一个永久的第三个表来表示多对多关系,然后加入每个表上的表查询。