背景: 我有一个包含 500 万个地址条目的表,我想在其中搜索不同的字段(客户姓名、联系人姓名、 zip 、城市、电话......),向上到 8 个字段。数据相当稳定,一天最多 50 次更改,所以几乎只有读取权限。
用户不应该提前告诉我他在搜索什么,我也希望支持组合搜索(搜索词的 AND 串联)。例如,“lincoln+lond”应搜索包含任何搜索字段中的搜索词的所有记录,以及以任何词开头的条目(如本例中的“London”)。
问题:现在我需要为这个搜索表选择一个索引策略。 (附带说明:我正在努力实现亚秒级响应时间,最差响应时间应该是 2 秒。)在性能方面有什么更好的地方:
- 对所有可查询列进行组合索引(需要其中 2 个,因为达到了 900 字节的索引限制)
- 在每个可查询列上放置单个索引
- 对可查询列做全文索引,使用全文查询
我放弃第 1 点,因为它似乎没有任何优势(索引使用将受到限制并且不会有“索引搜索”,因为并非所有字段都适合一个索引)。
问题:现在,我应该使用多个单一索引变体还是应该使用全文索引?是否有其他方法可以实现上述功能?
最佳答案
尝试两者,看看哪个在您的系统上更快。数据库优化几乎没有硬性规定,这实际上取决于您的环境。
关于sql-server - 组合索引与多个单一索引与全文索引的查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702469/