Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我应该使用LIKE查询具有400万行的表吗_Sql_Sql Server_Performance - Fatal编程技术网

Sql 我应该使用LIKE查询具有400万行的表吗

Sql 我应该使用LIKE查询具有400万行的表吗,sql,sql-server,performance,Sql,Sql Server,Performance,我正在设计一个搜索表单,我想知道我是否应该允许使用比如%search\u string%来搜索一个将有多达400万行的表。一般来说,我会说不。这是一个很好的选择。搜索字符串中的前导%将消除使用任何索引的可能性 在某些情况下,等待是可以接受的,并且/或者您不希望维护全文索引带来额外的管理开销,在这种情况下,您可以选择LIKE使用LIKE%search\u string%进行搜索,即使在索引列上,搜索速度也非常慢。最坏的情况是搜索会进行完整的表扫描 如果像search\u string%这样的搜索已

我正在设计一个搜索表单,我想知道我是否应该允许使用
比如%search\u string%
来搜索一个将有多达400万行的表。一般来说,我会说不。这是一个很好的选择。搜索字符串中的前导
%
将消除使用任何索引的可能性


在某些情况下,等待是可以接受的,并且/或者您不希望维护全文索引带来额外的管理开销,在这种情况下,您可以选择
LIKE

使用
LIKE%search\u string%
进行搜索,即使在索引列上,搜索速度也非常慢。最坏的情况是搜索会进行完整的表扫描


如果像search\u string%这样的搜索已经足够了,我会提供这种可能性。

这取决于-如果不知道搜索的响应程度,它可能很好,也可能完全不可用。只有使用可能的数据模式和搜索条件来分析搜索,您才会真正知道


正如RedFilter指出的,你可能想考虑一下,如果普通的搜索效果不好,

不,当你的表比较小或者你不关心你自己或其他人对数据库的查询时,你只应该使用<代码>,比如'%.%…'/Case>。 还有其他方法可以实现此功能,可以更好地扩展全文索引,或者,如果全文索引不可用或不够灵活,可以使用insert/update触发器提取非干扰词以供以后查询

我提到最后一种可能性,因为您可能不需要全文索引。换句话说,你真的在乎像“是”、“或”和“但是”这样的词吗(这些是我之前提到的噪音词)


您可以将字段分隔为多个单词,并将相关的单词放在另一个表中,然后在该表上使用盲目快速的查询来查找实际的行。

您不平衡的括号让我很烦恼:P@tenfour,听起来很危险,就像“我发现你缺乏信心令人不安”,我呼吸有点困难:-)别担心,在更新中修复。全文索引不是一个我知道得太多的领域,但我认为在SQL Server 2008上,您可以非常轻松地使用自定义(可能为空)噪声词列表,而不必使用系统噪声词列表。如果我的列是nvarchar(20),并且只包含一个词,那么它就可以了?@Omu-这将是典型的情况吗?您正在单个单词中搜索子字符串?如果是这样的话,我不知道全文索引是否会给你带来任何好处。我不确定它是否索引了部分单词。如果是这种情况,您应该将此信息与您正在使用的SQL Server版本的信息一起添加到问题中。实际上,我可以在不使用前导%@Omu的情况下执行此操作:如果您可以省略前导的
%
并在相关列上创建索引,那么您可能会发现性能是可以接受的。您需要使用特定的数据集和硬件进行测试才能确定。