代码之家  ›  专栏  ›  技术社区  ›  MicSim

组合索引与多个单索引与全文索引的查询性能

  •  3
  • MicSim  · 技术社区  · 16 年前

    背景

    用户不应该提前告诉我他在搜索什么,我还希望支持组合搜索(以及搜索词的连接)。例如,“lincoln+lond”应在任何搜索字段中搜索包含这两个搜索词的所有记录,以及以任何词开头的条目(如本例中的“London”)。

    问题: 现在我需要为这个搜索表选择一个索引策略。(顺便说一句:我试图达到亚秒级的响应时间,最差的响应时间应该是2秒。)就性能而言,什么更好:

    1. 在每个可查询列上放置单个索引
    2. 在可查询列上创建全文索引并使用全文查询

    我放弃第1点,因为它似乎没有任何优势(索引使用将受到限制,也不会有“索引查找”,因为并非所有字段都适合一个索引)。

    多个单一索引 变体,或者我应该选择 有吗

    4 回复  |  直到 16 年前
        1
  •  3
  •   Jonathan Allen    16 年前

    试试这两种方法,看看哪种在你的系统上更快。数据库优化几乎没有硬性规定,这实际上取决于您的环境。

        2
  •  2
  •   Pure.Krome    16 年前

    全文搜索 因为它有很多强大的性能特性。特别是在处理各种查询时。(例如x和y.x接近y等)。

    但在我开始漫谈FTS的专业版之前,我只是检查了您的服务器版本->sql2000。

    可怜的东西。当时FTS很简单,所以坚持下去 多个单一索引 .

    我们使用Sql2008和。..它摇滚。

    哦,顺便问一下,你知道Sql2008(免费版)中有FTS吗?可以升级吗?

    从sql2000开始->如果可以的话,sql2008非常值得。

        3
  •  1
  •   Diego    16 年前

    我同意Grauenwolf的观点,我想补充一点关于索引的说明。请记住,如果您使用以下语法:

    SELECT field1, field2, field3
    FROM table
    WHERE field1 LIKE '%value%
    

    然后,在搜索时无论如何都不会使用索引 字段1 而且你必须求助于全文索引。为了完整起见,上述语法返回所有行,其中 字段1 包含 价值 (一开始不一定)。 如果你必须搜索“contains”,全文索引可能更合适。

        4
  •  1
  •   MicSim    16 年前

    我选择了“多个单一索引”选项。我最终为每个查询的列创建了一个索引,每个索引只包含列本身。搜索效果很好,响应时间大多在亚秒级。有时需要2-3秒,但我将其归因于我的数据库服务器(几年前的笔记本电脑,3GB内存和慢速磁盘)。

    我没有测试全文选项,因为它不再是必要的(而且我没有时间去做。)