我有这个查询需要查询大量的ID(接近2000个)。但它根本没有效率。 (需要几秒钟)
$fp = fopen('urls.txt', 'r');
$i =1;
while ($url = fgets($fp)) {
file_put_contents("album/$i.jpg", file_get_contents($url));
$i++;
}
所以,基本上我必须处理大量的UserID,所以处理它的方法比使用'select * from tblABC where UserID in (2,3,123... )
'
使用Microsoft SQL
答案 0 :(得分:2)
我想说你需要创建一个包含所有id并与之连接的查找表
@echo off
"C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\path_to_script\pear_web_socket_server.proc.php
Pause
答案 1 :(得分:0)
首先,返回2,000(或更多)行可能需要一些时间。如果行是宽的(每行有大量数据),则尤其如此。
其次,您应该在用于IN
的列上有索引:
create index on idx_tblABC_UserId on tblABC(UserId);
第三,解析和编译长度为几十个字节的查询可能并不简单。您没有指定数据库,但可以作为考虑因素。通常,此阶段的查询处理并不重要。
第四,即使使用索引,查询引擎也可能决定进行全表扫描,具体取决于表的大小和IN
列表中id的频率。
第五,如果id来自数据库,那么你不应该将它们移动到应用层来构造和IN
子句。您应该在数据库中完成所有工作。
如果您在数据库中完成工作,我认为最好的查询是:
select a.*
from tblABC a
where exists (select 1 from ids where ids.UserId = a.UserId);