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


Optimization - PHP sqlsrv large database queries loading too slow

>UPDATE:在速度更快的计算机上尝试,100,000次查询需要8-10秒。但是,我仍然无法浏览数百万行。

我正在尝试创建一个带有用户界面的搜索引擎,以在 SQLSRV 数据库上的一个大表中搜索特定数据。我有php作为后端。整个数据库有几百万行,我希望有一个选项,允许我显示数据库中的所有行并导出它们。但是,从表面上看,数据库太大,无法显示每一行的非筛选视图。是否可以加载和显示每一行?我尝试删除 php 的超时和内存限制,但是搜索通常会崩溃或超过 5 分钟没有任何反应。我在本地主机上运行它并在远程服务器上查询数据库。我的电脑是带有 7gb 内存的 i5

主要目标

我将有 3 个选择。我的主要一般搜索查询将包括一系列 其中 COL1 "喜欢 % %" 或 COL2 喜欢 % % 或 ...等等,它基本上检查每一列是否有类似的匹配,这将是第一个选项和另一个选项,其中 COL1 "喜欢 % %"和 COL2 喜欢 % % 和......最后一个选项是显示数据库中的所有内容。对于每列的一般搜索(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做到这一点吗?希望你能帮上忙。提前感谢,谢谢你的时间。

不要使用 LIKE %search

%,不可优化优化,使用 LIKE 'search%'。如果必须,请使用全文索引,添加必要的覆盖索引会提高速度,非聚集索引如果只需要一列,只选择必要的列,不建议显示每一行。