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