ну да, но если учесть относительность тестов друг друга, то этот функционал можно вынести за скобки и сократить. тестируется лишь адекватный переход в t-sql, то бишь параметр преобразуется в список и заполняет временную переменную.
Смотрите о чем я. Когда используется SqlBulkCopy или table-valued parameters — то у вас уже на входе в процедуру есть таблица, с которой можно работать, когда varbinary или xml — вам еще нужно создать эту таблицу (или не нужно создавать, а сразу использовать что есть). То есть в тестах SqlBulkCopy (.net app -> #table -> @table -> процедура) сравнивался с xml (.net app -> xml -> @table -> процедура), так? Хотя может приведение к @table — это уже окончательная операция. Интереснее, наверное, было бы что-то вроде «insert into @table (id) select t1.id from @temptable t1 left join @table t2 on t1.id = t2.id where t2.id is null» (то есть вставка значений, которых еще не было), ну и это само собой нужно бы сделать несколько раз и взять среднее. Тут мне кажется уже будут другие результаты, хотя нужно пробовать.
вы правы в том, что в случаях с балккопи и табличным типом у меня нет необходимости создавать временную переменную, можно использовать уже пришедший параметр.
если следовать вашей логике и создавать прикладной функционал в тестируемых хранимых процедурах, то получается, что сервер в любом случае будет делать index seek при подстановке в join \ select in. стало быть если откинуть этот функционал, то «лишними» действиями относительно балккопи\табличный тип является выделение памяти.
значит, если сделать в балкопи \ табличном типе такое же выделение памяти, как и в других методах, то тесты подводятся к общему знаменателю и прикладным функционалом тестируемых хранимых процедур можно пренебречь.
У вас в таблице нет опечатки?
По данным в таблице получается, что для 1000 элементов table передача самая медленная ( со значением 65).
По логике больше похоже на 6.5.
опечатки нет. наводка, может?:) по хорошему, нужно прогнать эти тесты раз 100 на своих выборках, потом посчитать среднее. но все же, не думаю, что картина будет кардинально отличаться.
За чистый инсерт не скажу, но многократный вызов хранимки, инсертящий по одной записи за раз заставил нас как то уйти курить на пол часа при 400к строк)
Тесты методов передачи списковых переменных в хранимую процедуру MS SQL 2008