更新:在一台速度更快的计算机上尝试,100000次查询需要8-10秒。然而,我仍然在经历数以百万计的列时遇到困难。
我正在尝试创建一个具有用户界面的搜索引擎,以便在SQLSRV数据库中的一个巨大表中搜索特定数据。我的后端是php。整个数据库有几百万行,我希望有一个选项,允许我也显示数据库中的所有行并导出它们。但是,从表面上看,数据库太大了,无法显示每一行未经过滤的视图。是否可以加载和显示每一行?我已经尝试过取消对php的超时和内存限制,但是搜索通常会崩溃,或者在超过5分钟内什么也不会发生。我正在本地主机上运行这个程序,并在远程服务器上查询数据库。我的电脑是一个5gb内存的i7。
关键目标
我有三个选择。我的主要一般搜索查询将包括一系列的COL1‘喜欢% %’或%%或%%或.等等,它本质上检查每一列是否有类似的匹配--这将是第一个选项和另一个选项,其中COL1 'LIKE %‘和COL2类似%和.最后一个选项是显示数据库中的所有内容。对于对每一列的一般搜索(一系列or或UNIONS),您认为在每一列上添加一个索引会有用吗?在这两种情况下,使用一系列和一系列的覆盖索引进行高级搜索会有帮助吗?还是为每一列添加一个索引?
我试过用这个测试
<?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做这个吗?希望你能帮上忙。先谢谢你,谢谢你抽出时间。
发布于 2016-02-24 14:38:14
不要使用LIKE %search%,不能使用sargable,要使用“search%”。如果必须使用全文索引,添加必要的覆盖索引将提高速度,非聚集索引如果只需要一列,则只选择必需列,不建议显示每一行。
https://stackoverflow.com/questions/35205063
复制相似问题