首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化- PHP sqlsrv大型数据库查询加载太慢

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

Stack Overflow用户
提问于 2016-02-04 15:32:15
回答 1查看 1K关注 0票数 0

更新:在一台速度更快的计算机上尝试,100000次查询需要8-10秒。然而,我仍然在经历数以百万计的列时遇到困难。

我正在尝试创建一个具有用户界面的搜索引擎,以便在SQLSRV数据库中的一个巨大表中搜索特定数据。我的后端是php。整个数据库有几百万行,我希望有一个选项,允许我也显示数据库中的所有行并导出它们。但是,从表面上看,数据库太大了,无法显示每一行未经过滤的视图。是否可以加载和显示每一行?我已经尝试过取消对php的超时和内存限制,但是搜索通常会崩溃,或者在超过5分钟内什么也不会发生。我正在本地主机上运行这个程序,并在远程服务器上查询数据库。我的电脑是一个5gb内存的i7。

关键目标

我有三个选择。我的主要一般搜索查询将包括一系列的COL1‘喜欢% %’或%%或%%或.等等,它本质上检查每一列是否有类似的匹配--这将是第一个选项和另一个选项,其中COL1 'LIKE %‘和COL2类似%和.最后一个选项是显示数据库中的所有内容。对于对每一列的一般搜索(一系列or或UNIONS),您认为在每一列上添加一个索引会有用吗?在这两种情况下,使用一系列和一系列的覆盖索引进行高级搜索会有帮助吗?还是为每一列添加一个索引?

我试过用这个测试

代码语言:javascript
复制
<?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"; }
?>

这是我的测试代码的一个简短的摘录,我尝试将显示限制为一列,即使这样,它也很难查询超过10万行的任何内容。事实上,10万行大约需要10秒。我还尝试使用可滚动、缓冲和转发游标进行查询设置,还删除了它,因为它没有帮助。

使用php和sqlsrv可以进行这种类型的查询吗?是否有一个更快更好的解决方案,用UI制作一个数据库搜索引擎,我能用php做这个吗?希望你能帮上忙。先谢谢你,谢谢你抽出时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 14:38:14

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35205063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档