Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 server 组合索引对多个单索引对全文索引的查询性能_Sql Server_Performance_Indexing_Sql Server 2000_Query Optimization - Fatal编程技术网

Sql server 组合索引对多个单索引对全文索引的查询性能

Sql server 组合索引对多个单索引对全文索引的查询性能,sql-server,performance,indexing,sql-server-2000,query-optimization,Sql Server,Performance,Indexing,Sql Server 2000,Query Optimization,背景:我有一个包含500万个地址条目的表格,我想搜索不同的字段(客户姓名、联系人姓名、邮政编码、城市、电话等),最多8个字段。数据非常稳定,每天最多更改50次,因此几乎只有读访问 用户不应该提前告诉我他在搜索什么,我还希望支持组合搜索(以及搜索词的串联)。例如,“lincoln+lond”应在任何搜索字段中搜索包含两个搜索词的所有记录,以及以任何搜索词开头的条目(如本例中的“London”) 问题:现在我需要为此搜索表选择索引策略。(作为旁注:我正在尝试实现亚秒响应时间,最差的响应时间应该是2秒

背景:我有一个包含500万个地址条目的表格,我想搜索不同的字段(客户姓名、联系人姓名、邮政编码、城市、电话等),最多8个字段。数据非常稳定,每天最多更改50次,因此几乎只有读访问

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

问题:现在我需要为此搜索表选择索引策略。(作为旁注:我正在尝试实现亚秒响应时间,最差的响应时间应该是2秒。)性能方面更好的是:

  • 对所有可查询列进行组合索引(需要其中两个,因为索引限制为900字节)
  • 在每个可查询列上放置单个索引
  • 在可查询列上建立全文索引并使用全文查询
  • 我放弃第1点,因为它似乎没有任何优势(索引使用将受到限制,并且不会有“索引搜索”,因为不是所有字段都适合一个索引)


    问题:现在,我应该使用多个单一索引变体还是使用全文索引?是否有其他方法来实现上述功能?

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

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

    SELECT field1, field2, field3
    FROM table
    WHERE field1 LIKE '%value%
    
    然后,在字段1上搜索时,无论如何都不会使用索引,您必须求助于全文索引。为完整起见,上述语法返回field1包含值的所有行(不一定在开头)。
    如果您必须搜索“包含”,则全文索引可能更合适。

    要回答我自己的问题:

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


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

    最初,我打算建议使用FTS,因为它有很多强大的性能特性。尤其是在处理各种查询时。(如x和y.x靠近y等)

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

    可怜的家伙。当时的FTS非常简单,所以请坚持使用多个单指数

    我们使用Sql2008和。。。它摇晃

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

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

    但是是的,坚持你的M.S.I.选择