随着文件增加,插入FileTable的速度变慢

时间:2019-10-04 14:46:41

标签: c# sql-server filestream filetable

我正在MSSQL 2017中使用FileTables保存和加载图像,但是只要FileTable中的图像数量很高,增加查询就会花更长的时间执行。我禁用了8.3代名称,以防万一。

这是我的插入查询:

string query = "DECLARE @path HIERARCHYID";
query += " DECLARE @new_path VARCHAR(675)";
query += " SELECT @path = path_locator";
query += " FROM Images";
query += " WHERE name = 'Images'";
query += " SELECT @new_path = @path.ToString()";
query += " + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()), 1,6))) + '.'";
query += " + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()), 7,6))) + '.'";
query += " + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()), 13,4))) + '/'";
query += " INSERT into Images (stream_id, file_stream, name, path_locator) ";
query += "  values (NEWID(), @File, '" + filename + "', @new_path)";

FileTable的名称为“ Images”,如上所示,当我将图像插入名为“ Images”的子目录时。

如果您认为有一种方法可以使我的插入查询更快,请告诉我。

1 个答案:

答案 0 :(得分:0)

我认为这部分代码会导致与行数有关的性能问题。

query += " SELECT @path = path_locator";
query += " FROM Images";
query += " WHERE name = 'Images'";

您只需要一行,就可以为此添加TOP 1

query += " SELECT TOP 1 @path = path_locator";
query += " FROM Images";
query += " WHERE name = 'Images'";