SELECT * FROM table HUNDREDS MILLIONS ROWS

时间:2016-09-08 18:55:43

标签: php mysql sql select

好的,所以我有一个目前有40000行的表,我需要SELECT这些。我使用idurl列的索引,如果必须SELECT idurl,我会立即使用,但如果我必须SELECT *它非常慢。我想要做的是搜索我的数据库并输出匹配项,我用

完成了这项工作
while($arr = mysqli_fetch_array($query))
     { #code... echo $arr['whatever_i_need']."<br>"; }

$query = mysqli_query($link,"SELECT * FROM table");

将来我会在数据库中拥有数亿行,所以我想在1秒内快速返回搜索结果。如果你能给我解决方案我真的很感激!谢谢!

修改

我不想显示所有数据,但我想快速循环以找到所有匹配项

1 个答案:

答案 0 :(得分:1)

如果你想要速度,那么你肯定不希望查询从表中返回每个行,然后“循环”查询返回的每一行以识别你感兴趣的那些在返回。这种方法可能会给小表提供可接受的性能,但它肯定不会扩展。

为了提高性能,您希望数据库只找到您想要返回的行,过滤掉您不想要的行,并仅返回子集。

这归结为编写适当的SQL查询;执行适当的SELECT语句。

SELECT t.col1
     , t.col2
     , t.col3
  FROM mytable t
 WHERE t.col3 LIKE '%foo%'
   AND t.col2 >= '2016-03-15'
   AND t.col2 <  '2016-06-15'
 ORDER BY t.col2 DESC, t.col1 DESC
 LIMIT 200

性能是关于确保适当的索引可用以及查询执行是否有效地使用可用索引。