Sql server sqlserver;文本列上的索引
我有一个包含多个列的数据库表;大多数是Sql server sqlserver;文本列上的索引,sql-server,indexing,Sql Server,Indexing,我有一个包含多个列的数据库表;大多数是VARCHAR(x)type列,其中一些列上有索引,以便我可以快速搜索其中的数据 但是,其中一列是TEXT列,因为它包含大量数据(23KB的纯ascii文本等)。我希望能够在该列中搜索(…其中col1类似于“%search string%”…),但目前执行查询需要花费很长时间。我知道由于此列搜索,查询速度很慢,因为当我从WHERE子句中删除该条件时,查询会立即完成(我会考虑) 我无法在此列上添加索引,因为在SQL Server Management Stud
VARCHAR(x)
type列,其中一些列上有索引,以便我可以快速搜索其中的数据
但是,其中一列是TEXT
列,因为它包含大量数据(23KB的纯ascii文本等)。我希望能够在该列中搜索(…其中col1类似于“%search string%”…
),但目前执行查询需要花费很长时间。我知道由于此列搜索,查询速度很慢,因为当我从WHERE
子句中删除该条件时,查询会立即完成(我会考虑)
我无法在此列上添加索引,因为在SQL Server Management Studio的“索引生成器/向导”中,该列的该选项已灰显
为了加快该列中的查询搜索,我在这里有哪些选项
谢谢你的时间
更新好的,我查看了全文搜索并做了所有这些工作,现在我想运行查询。但是,当使用“包含”时,它只接受一个单词;如果我需要一个确切的短语呢<代码>。。。其中包含(col1,'搜索短语')…抛出错误 对不起,我是SQL Server新手 更新2
对不起,我刚想出来;使用多个“包含”子句,而不是一个包含多个单词的子句。实际上,这仍然没有得到我想要的(确切的短语),它只确保短语中的所有单词都存在。您应该考虑在列上使用全文索引。搜索文本字段总是非常慢。请尝试一下,看看这是否更适合您。如果您的查询类似于
类似于“%string%”
(即,您在文本字段中搜索字符串),则需要全文索引
如果在字段的开头搜索子字符串(如'string%'
),并使用SQL Server 2005
或更高版本,则可以将文本
转换为VARCHAR(MAX)
,创建计算列并为该列编制索引
有关性能详细信息,请参阅我博客中的这篇文章:
您可以在FTS中执行复杂的布尔查询;像
包含(yourcol、“我的第一个字符串”或“我的第二个字符串”和“我的第三个字符串”)
根据您的查询,ContainsTable或freetexttable可能会提供更好的结果
如果你是通过.Net连接的,你可能想看看,因为没有人说过(可能是因为这很明显),像“%string%”这样的查询会绕过你现有的索引,所以它会运行得很慢。
因此-为什么需要使用全文索引。(这就是卡西诺所说的)
更正-我确信我学会了这一点,并且一直相信这一点-但经过一些调查(在开始时使用通配符)后,似乎还可以?我的旧正则表达式查询在喜欢的情况下运行得更好 我只是试了一下你的变体,但它不起作用;首先,它需要使用'and not',第二个添加第二个或多个单词不起作用,如果我使用'and'或'Y ERROSS you need a single'在查询中,语法结尾是Contains(*或colname','your data'和'some other data'),则链接不再起作用。如果可能,请修复!链接现在已修复