Вставка в FileTable происходит медленнее с увеличением файлов - PullRequest
0 голосов
/ 04 октября 2019

Я использую FileTables в MSSQL 2017 для сохранения и загрузки изображений, но всякий раз, когда изображения в 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 - «Изображения», и когда я вставляю изображения в подкаталог с именем«Изображения», как вы можете видеть выше.

Если вы считаете, что есть способ ускорить мой запрос на вставку, сообщите мне.

1 Ответ

0 голосов
/ 04 октября 2019

Я думаю, что эта часть кода может вызвать проблемы с производительностью, связанные с количеством строк.

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'";
...