0

我有一个表,它存储文件名的树状结构。此表中当前有 800 万条记录。我正在研究一种快速查找名称中嵌入了特定序列号的文件列表的方法。

FS_NODES
-----------------------------------
NODE_ID              bigint PK
ROOT_ID              bigint
PARENT_ID            bigint
NODE_TYPE            tinyint
NODE_NAME            nvarchar(250)
REC_MODIFIED_UTC     datetime
REC_DELETION_BIT     bit

示例文件名(存储在 node_name 中):
scriptname_SomeSerialNumber_201205240730.xml

正如预期的那样,查找文件的 LIKE 语句需要几分钟来扫描整个表,并且希望对此进行改进。名称没有一致的模式,因为每个开发人员都喜欢创建自己的命名约定。

我尝试使用全文搜索并且非常喜欢这个想法,但无法让它根据名称中的关键字查找文件。我相信问题是由于下划线造成的。

关于如何让它发挥作用的任何建议?我在目录中使用中性语言。

@@VERSION
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
Nov 24 2008 13:01:59 
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

有没有办法更改目录并手动拆分关键字?谢谢!

4

1 回答 1

1

全文搜索不是答案。它用于单词,而不是部分字符串匹配。您应该做的是,在此表中插入或更新数据时,将与将来搜索相关的文件名部分提取到您可以索引的自己的列中。毕竟,按照您使用它们的方式,它们是独立的数据片段。您还可以考虑强制执行更可预测的命名约定,而不是让开发人员为所欲为。

根据用户请求编辑:

添加一个计算列,即 REPLACE(filename, '_', ' ')。或者不是计算列,而是您手动填充现有数据并更改插入过程以处理前进的列。或者甚至将它们分成相关表中的单独行。

于 2012-05-24T13:57:44.417 回答