Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有没有更好的方法来访问数据库中数百条不同的记录?_Mysql_Select - Fatal编程技术网

Mysql 有没有更好的方法来访问数据库中数百条不同的记录?

Mysql 有没有更好的方法来访问数据库中数百条不同的记录?,mysql,select,Mysql,Select,我将使用以下select语句按名称从数据库(MySQL)中读取记录: select * from table where name = 'xxx' 但是我在一个http请求中有数百个名称,所以如果我使用上面的语句,我必须发出数百个select。或者我只是使用MySQLselect。。在中减少sql调用 但还是太慢了。那么,有没有更好的方法来实现我的目标?提前谢谢 如果在where条件下使用,首先应该在“name”上设置索引。如果在where中有更多的条件,请尝试找出更多的列可以具有索引 在查询

我将使用以下select语句按名称从数据库(MySQL)中读取记录:

select * from table where name = 'xxx'
但是我在一个http请求中有数百个名称,所以如果我使用上面的语句,我必须发出数百个select。或者我只是使用MySQL
select。。在
中减少sql调用


但还是太慢了。那么,有没有更好的方法来实现我的目标?提前谢谢

如果在where条件下使用,首先应该在“name”上设置索引。如果在where中有更多的条件,请尝试找出更多的列可以具有索引

在查询中使用它可以解决的第二件事是最小化数据库调用

select * from table where name IN ( 'xxx', 'syz', 'abc',....);

我认为如果你把所有的名字分成几块,然后在select语句中使用这些块,你的问题就会得到解决。比方说

$names = array($n1,$n2...);
$totalnames = count($totalnames);
$chunksize = 50;   
$totalChunks = ceil($totalnames/$chunksize);
for($i=0;$i<$totalChunks;$i++)
{
  $j = $chunksize*$i;
  for($k=$j;$k<=$j;$k++)
  {
    select statement with in
   }
}
$names=数组($n1,$n2…);
$totalnames=计数($totalnames);
$chunksize=50;
$totalChunks=ceil($totalnames/$chunksize);

对于($i=0;$iToo slow?请确保您的数据库为
name
列提供了一个适当的索引,并让它为您完成这项艰巨的工作。@jweyrich我的意思是,我必须在一个http请求处理过程中发出数百条sql,因此,我是否使用具有索引的列不是关键点。您为什么没有尝试使用WHERE…in调用呢?根据MySQL的说法文档除了DB级别的“允许的最大数据包”设置外,您可以在in语句中输入的值的数量没有明确的限制。您得到的是“数据包太大”吗错误?你能告诉我们更多关于你想要完成什么的细节吗?@Martin index是重点。如果你没有关于名称的索引,MySQL必须遍历整个表才能找到你的名称,它是
O(n*m)
n行,m个名称。有了索引,它更可能是
O(log(n)*m)
谢谢!在我看来,没有更好的办法了。