我正在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”的子目录时。
如果您认为有一种方法可以使我的插入查询更快,请告诉我。
答案 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'";