Desktop
Website
Multimedia
Database
Security
Enterprise
Pergunta : Indicação simples da inserção muito lenta
Olá! os povos,
I've começ uma indicação muito simples da inserção, como segue
Insert no
select 0 de MyTable (StringID, StringText),
select 1 da UNIÃO do Br/> de N'123452.46093750'<,
select 2 da UNIÃO do Br/> de N'468330.90625000'<,
select 3 da UNIÃO do Br/> de N'152484.99609375'<,
select 4 da UNIÃO do Br/> de N'476937.99609375'<,
select 5 da UNIÃO do Br/> de N'30 D6-5FFC'<,
select 6 da UNIÃO do Br/> de N'AE79-9EED'<,
select 7 da UNIÃO do Br/> de N'10.5.0.75'<,
select 8 da UNIÃO do Br/> de N'00-21-9B-01-5C-C4'<,
select 9 da UNIÃO do Br/> do Writer'< do original de N'Microsoft XPS,
select 10 da UNIÃO do
de N'ActiveReports 6 ',
select da UNIÃO do Br/> de N'6.0.2250.0'< 11, UNIÕES do
The do Br/> de N'24'< ...... continua para 1800 registros, e cada indicação é estoirada em grupos de 100, apenas assim que eu não bato nenhuma limites no tamanho da indicação ou número de inserção de unions.
This toma 4 segundos para introduzir 1800 fileiras, por que é este tão lento? (Os divertidos do MS aproximadamente em TPC figuram etc., certamente o mais atrasado e grande poderia controlar mais de 450 por segundo das fileiras!!)a tabela do
The não tem nenhum índice, nenhuns relacionamentos: o
cria a tabela MyTable
(
StringID int nao nulo,
do
StringText
I têm a mudança a base de dados registrar a “simples”, sua edição 2008 do colaborador do Sql que funciona em uma caixa do núcleo 2.66 do quadrilátero com o RAM 4GB. Nada mais está funcionando nessa caixa a não ser que o estúdio visual 2010.
I tente ") valores (“em vez de seleto, e do mim tentaram vírgula nova a sintaxe múltipla baseada da inserção do sql 2008 - todas as mesmas idéias do
Any? Qualquer coisa tentar?
class= do
Resposta : Indicação simples da inserção muito lenta
É aqui o que restaura o DB antes de cada teste.
Todos os testes são 10000 inserções.
freeproccache do dbcc
dropcleanbuffers do dbcc
ajustar o nocount sobre
IR
;
deixar cair a tabela MyTable3
IR
Criar a tabela MyTable3
(
StringID int nao nulo,
Zero nvarchar de StringText (4000) não
)
;
=========================
test1 - formulário da união, uma indicação grande (10000 umas disparadas), gerada using emendas below e algumas manuais
declarar o @i int @i=1 ajustado
quando o @i <� 10001="">começar
imprimir “selecionam “+right (@i, 10) +”, o ''' +convert de N
(varchar
(máximo), o newid
())+ união do '''”;
ajustar @i=@i+1
extremidade
=========================
introduzir MyTable3
selecionar 1,
união de N'A0B8022B-CFE9-43C9-97E5-DE89822AC32F
selecionar 2,
união de N'F87C8670-1339-458E-8F1C-C2E9B717F4AA
selecionar 3, união
de N'35 ACFFFC-52CF-4805-8C30-A4EB41F3A218
..........
selecionar 10000.
Tempo - 7 minutes+, matados
=========================
test2 - união TODO O formulário
=========================
Tempo - mais rapidamente do que acima. A SORTE DISTINTA não é exigida então. A união no seus próprias faz um distinto
=========================
test3 - união TODO O formulário, 100 por o grupo, separado perto;
=========================
Tempo - mesmo mais rapidamente. Cada grupo é cometido e não toma muito a manipulação no RAM. Além disso, o optimizer da pergunta não passa muita hora em perguntas longas. O tempo de QO vai acima exponencial para perguntas longas.
=========================
test4 - a tabela truncada, introduz outra vez (seguindo de test3 sem a restauração)
=========================
O tempo - mais rapidamente de 3. QO não tem que fazer nenhum planeamento, todas as 100 perguntas [da estática] que vêm do esconderijo da planta
=========================
test5 - using inserções parameterised. QO planeia somente uma inserção. Todas inserções restantes vão pela planta
Inserções geradas using
declarar o @i int @i=1 ajustado
quando o @i <� 101="">começar
imprimir “exec valores da inserção MyTable3 do sp_executesql N '' (@a, @a int do @b) '', N '', @b nvarchar (4000) '', @a='+ para a direita
(@i, 10) +”
, ''' +convert do @b=N
(varchar
(máximo),
o newid ())+ ''''
;
ajustar @i=@i+1
extremidade
=========================
Tempo tomado - 6s! O mais rapidamente.
===================
Conclusões
(1) o Optimizer da pergunta do usuário do Sql toma exponencial mais por muito tempo para compilar mais longo o texto da pergunta.
(2) os grandes blocos da inserção using a união ou os valores (), (), () testes padrões sentam-se em um MONTÃO na memória, a seguir dequeued do MONTÃO na inserção - mau.
(3) As perguntas Parameterized são boas. Melhorar se você os trata em diz 10 inserções, mas cada inserção exigiria então (para o exemplo acima) 20 parâmetros na inserção de 10 grupos.
(4) ** nenhum teste acima, mas minha suposição ** Using um sp para a inserção, por exemplo @a do usp_insert, o @b que faz a inserção e seu certificado maioria é do formulário
usp_insert 1 do exec, text'; de N'test
usp_insert 2 do exec, text'; de N'test
etc.
ser tão rapidamente quanto as inserções Parameterized using o sp_executesql, porque um SP é compilado uma vez somente e re-used#.
# - que é a fonte de problemas sniffing do parâmetro….
Outras soluções
Perguntas da entrevista do certificado de Shell da festança
lima de .vmdk
Como encontrar a contagem da fileira em Oracle DataReader em ASP.NET?
Excitador do bluetooth BCM2045 do inspiron 1720 de Dell para o profissional de Windows Xp.
Como conseguir o lightbox mostrar sobre a bandeira instantânea?
Fora do escritório o assistente que não trabalha w/Forwarding configurou
Redistribuindo o RASGO em subnets non-contiguous do OSPF.
líquidos de corpo após a sessão da natação
SQL0952N
Criando um vbscript para a chave do registro - IRPStackSize