优化 - PHP sqlsrv大型数据库查询加载速度太慢

时间:2016-02-04 15:32:16

标签: php sql-server database performance search

更新:在更快的计算机上尝试它,100,000次查询需要8-10秒。但是,我仍然无法通过数百万行。

我试图创建一个带有用户界面的搜索引擎,以在SQLSRV数据库的一个巨大的表中搜索特定数据。我有php作为后端。总数据库有几百万行,我想有一个选项,允许我也显示数据库中的所有行并导出它们。但是从数据库看起来太大而无法显示每行的非过滤视图。是否可以加载并显示每一行?我已经尝试删除php的超时和内存限制但是搜索通常会崩溃或者5分钟内没有任何事情发生。我在localhost上运行它并查询远程服务器上的数据库。我的电脑是带有5GB内存的i7。

关键目标

我将有3个选项。 我的主要一般搜索查询将包含一系列WHERE COL1&LIKE %%'或者COL2 LIKE %% OR ...等等,它基本上检查每列是否有类似的匹配,这将是第一个选项,另一个选项是WHERE COL1' LIKE %%' AND COL2 LIKE %% AND ...最后一个选项是显示数据库中的所有内容。对于每列上的常规搜索(OR系列或UNIONS系列),您认为在每列上添加单个索引是否可行?以及一系列AND的高级搜索。覆盖指数在两种情况下都有帮助吗?或者为每列添加一个索引?

我已尝试将其用于测试

<?php
$connection = sqlsrv_connect($server, $info);
if(!$connection){
    die("Error: " . mysql_error());
}

$queryResults = sqlsrv_query($connection, "SELECT id FROM myDatabase");
if($queryResults){
    for ($i = 0; $i < 100000; $i++){
        $row = sqlsrv_fetch_array($result);
                   echo "<tr>";
                   echo "<td>" .  $row['id'] . "</td>";
                   echo "</tr>";
    }
} else { echo "failed"; }
?>

这是我的测试代码的一个简短摘录,我尝试将显示限制为仅一列,即使这样,它也无法查询超过100,000行的任何内容。实际上,100,000行大约需要10秒。我还尝试使用可滚动和缓冲的前向光标进行查询设置,并将其删除,因为它没有帮助。

这种类型的查询是否可以使用php和sqlsrv?有没有更快更好的解决方案来制作带有UI的数据库搜索引擎,我可以用php做到这一点吗?我希望你能提供帮助。提前致谢,谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

不要使用LIKE%search%,而不是sargable,请使用LIKE&#39; search%&#39;。如果必须,使用全文索引,添加必要的覆盖索引将提高速度,非聚集索引如果只需要一列,则只选择必要的列,不建议显示每一行。