Sql server 组合索引对多个单索引对全文索引的查询性能
背景:我有一个包含500万个地址条目的表格,我想搜索不同的字段(客户姓名、联系人姓名、邮政编码、城市、电话等),最多8个字段。数据非常稳定,每天最多更改50次,因此几乎只有读访问 用户不应该提前告诉我他在搜索什么,我还希望支持组合搜索(以及搜索词的串联)。例如,“lincoln+lond”应在任何搜索字段中搜索包含两个搜索词的所有记录,以及以任何搜索词开头的条目(如本例中的“London”) 问题:现在我需要为此搜索表选择索引策略。(作为旁注:我正在尝试实现亚秒响应时间,最差的响应时间应该是2秒。)性能方面更好的是: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秒
问题:现在,我应该使用多个单一索引变体还是使用全文索引?是否有其他方法来实现上述功能?尝试这两种方法,看看哪种方法在您的系统上更快。数据库优化几乎没有硬性规定,这取决于您的环境。我同意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.选择