如何获取本地文件的id

时间:2013-04-14 10:54:57

标签: c# database algorithm sqlite

我有一个数据库表,它使用以下定义保存文件/文件夹结构:

id    parentid     fileOrFolderName
111    222          aaa.txt
222    333          folderA
333    Root         folderB
444    222          bbb.doc

...........

“Root”是预定义根文件夹的特殊ID。所以,上面的记录意味着:“Rootfolder \ folderB \ folderA \ aaa.txt”中有一个文件,其id为“111”。

现在,考虑到文件的完整路径,我想得到它的id。例如:

GetFileId(“RootFolder \ folderB \ folderA \ aaa.txt”)将返回“111”。

此表中有大约10-50,000条记录,如何正确且高效地编写GetFileId函数?

这个问题不仅限于任何语言或数据库,我需要的是正确的算法。提前致谢。

1 个答案:

答案 0 :(得分:1)

使用这种数据结构,明显的算法(每个级别单独执行一次查找)是唯一有效的算法。

对于目录层次结构中的每个级别,请执行:

SELECT id FROM MyTable WHERE parentid = ? AND fileOrFolderName = ?

您可以将所有查找组合成一个嵌套语句:

SELECT id FROM MyTable
WHERE parentid =
   (SELECT id FROM MyTable
    WHERE parentid =
       (SELECT id FROM MyTable
        WHERE parentid = 'Root'
          AND fileOrFolderName = 'folderB')
      AND fileOrFolderName = 'folderA')
  AND fileOrFolderName = 'aaa.txt'

然而,这不会快得多,但会使查询构造更复杂。


要快速使用,请使用正确的索引。 (两列parentidfileOrFolderName上的索引应该会有所帮助。这两个列上的covering indexid列可能会更好一些。)