【问题标题】:SQL Server; index on TEXT columnSQL 服务器; TEXT 列的索引
【发布时间】:2009-05-06 15:40:56
【问题描述】:

我有一个包含几列的数据库表;其中大多数是VARCHAR(x) 类型的列,其中一些列上有索引,以便我可以快速搜索其中的数据。

但是,其中一列是TEXT 列,因为它包含大量数据(23 kb 纯 ascii 文本等)。我希望能够在该列中进行搜索(...WHERE col1 LIKE '%search string%'...),但目前执行查询需要很长时间。我知道由于此列搜索,查询很慢,因为当我从 WHERE 子句中删除该条件时,查询会立即完成(我会考虑)。

我无法在此列上添加索引,因为该选项在 SQL Server Management Studio 的索引构建器/向导中为该列显示为灰色。

我有哪些选项可以加快该列中的查询搜索速度?

感谢您的宝贵时间...

更新
好的,所以我查看了全文搜索并做了所有这些事情,现在我想运行查询。但是,当使用“包含”时,它只接受一个词;如果我需要一个确切的短语怎么办? ... WHERE CONTAINS (col1, 'search phrase') ... 抛出错误。

抱歉,我是 SQL Server 新手

更新 2 抱歉,刚刚想通了;使用多个“包含”子句而不是一个包含多个单词的子句。实际上,这仍然没有得到我想要的(确切的短语),它只是确保短语中的所有单词都存在。

【问题讨论】:

    标签: sql-server indexing


    【解决方案1】:

    如果您的查询类似于LIKE '%string%'(即,您在TEXT 字段 搜索字符串),那么您将需要FULLTEXT 索引。

    如果您在字段 (LIKE 'string%') 的开头 中搜索子字符串并使用SQL Server 2005 或更高版本,则可以将TEXT 转换为VARCHAR(MAX),创建计算列并索引此列。

    有关性能详情,请参阅我的博客中的这篇文章:

    【讨论】:

      【解决方案2】:

      搜索 TEXT 字段总是很慢。试试Full Text Search,看看它是否更适合您。

      【讨论】:

      • 链接失效了。如果可能,请修复!
      • 链接已修复
      【解决方案3】:

      您应该考虑在列上使用全文索引。

      【讨论】:

        【解决方案4】:

        您可以在 FTS 中进行复杂的布尔查询;喜欢

        contains(yourcol,'"My first sting" or "my second string" and "my third string"')

        根据您的查询 ContainsTable 或 freetexttable 可能会提供更好的结果。

        如果您通过 .Net 进行连接,您可能需要查看 A google full text search

        【讨论】:

        • 我刚试过你的变种,但它不起作用;首先,它需要使用'而不是",如果我在查询中使用'或",第二个添加第二个或多个单词不起作用
        • 我的错误是你需要一个 ' 最后的语法是 Contains (* or colname,' " your data " and "some other data" ') msdn.microsoft.com/en-us/library/ms187787.aspx
        【解决方案5】:

        而且由于没有人已经说过(也许是因为它很明显)查询LIKE '%string%' 会绕过您现有的索引 - 所以它会运行缓慢。 因此 - 为什么您需要使用全文索引。 (这是 Quassnoi 所说的)。

        更正 - 我确信我学到了这一点,并且一直相信这一点 - 但经过一些调查(在开始时使用通配符)似乎没问题?我的旧正则表达式查询运行得更好!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-10
          • 2011-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-29
          • 1970-01-01
          • 2013-01-22
          相关资源
          最近更新 更多