我有一个表存储树状结构的文件名。目前该表中有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)
有没有办法改变目录并手动拆分关键字? 谢谢!
答案 0 :(得分:1)
全文搜索不是答案。它用于单词,而不是部分字符串匹配。您应该做的是,在此表中插入或更新数据时,提取与将来搜索相关的文件名部分到您可以索引的自己的列中。毕竟,它们是您使用它们的单独数据。您还可以考虑实施更可预测的命名约定,而不是让开发人员做任何他们想做的事情。
每个用户请求编辑:
添加一个REPLACE(filename,'_','')的计算列。或者不是计算列,而只是手动填充现有数据的列,并更改插入过程以处理未来。或者甚至将它们分解为相关表中的单独行。