Microsoft
Software
Hardware
Network
Cuestión : Declaración simple del parte movible muy lenta
Hola la gente,
I tiene una declaración muy simple del parte movible, como sigue
Insert en el
select 0,
select 1,
select 2,
select 3,
select 4,
select 5,
select 6,
select 7,
select 8,
select 9,
select 10,
select de MyTable (StringID, StringText) de la UNIÓN del Br/> de N'123452.46093750'< de la UNIÓN del Br/> de N'468330.90625000'< de la UNIÓN del Br/> de N'152484.99609375'< de la UNIÓN del Br/> de N'476937.99609375'< de la UNIÓN del Br/> de N'30 D6-5FFC'< de la UNIÓN del Br/> de N'AE79-9EED'< de la UNIÓN del Br/> de N'10.5.0.75'< de la UNIÓN del Br/> de N'00-21-9B-01-5C-C4'< de la UNIÓN del Br/> del Writer'< del documento de N'Microsoft XPS de la UNIÓN del
de N'ActiveReports 6 ' de la UNIÓN del Br/> de N'6.0.2250.0'< ¿11, UNIONES del
The del Br/> de N'24'< ...... continúan para 1800 expedientes, y cada declaración se explota en las hornadas de 100, apenas así que no golpeo ninguna límites en tamaño de la declaración o número de parte movible de unions.
This tarda 4 segundos para insertar 1800 filas, por qué es esto tan lento? (Las diatribas del ms en TPC calculan alrededor etc, seguramente el más último y el más grande podría manejar más de 450 filas por segundo!!)la tabla del
The no tiene ninguÌn índice, ningunas relaciones: el
crea la tabla MyTable
(
StringID internacional no nulo,
del
StringText
I tienen cambio la base de datos el registrar a “simple”, su edición 2008 del revelador del Sql que funciona en una caja de la base 2.66 del patio con el RAM 4GB. ¿Nada está funcionando en esa caja a menos que el estudio visual 2010.
I haya intentado ") valores (“en vez selecto, y de mí han intentado el sintaxis múltiple basado nueva coma del parte movible del sql 2008 - todas las mismas ideas del
Any? ¿Cualquier cosa intentar?
class= del
Respuesta : Declaración simple del parte movible muy lenta
Aquí es qué reajusta el DB antes de cada prueba.
Todas las pruebas son 10000 partes movibles.
freeproccache del dbcc
dropcleanbuffers del dbcc
fijar el nocount encendido
IR
;
caer la tabla MyTable3
IR
Crear la tabla MyTable3
(
StringID internacional no nulo,
Falta de información nvarchar de StringText (4000) no
)
;
=========================
test1 - forma de la unión, una declaración grande (10000 una tirada), generada usar pellizcos below y los algunos manuales
declarar el @i internacional @i=1 determinado
mientras que el @i <� 10001="">comienza
imprimir “seleccionan “+right (@i, 10)+”, el ''' +convert (
varchar (
máximo), el newid de N
())+ unión del '''”;
fijar @i=@i+1
extremo
=========================
insertar MyTable3
seleccionar 1,
unión de N'A0B8022B-CFE9-43C9-97E5-DE89822AC32F
seleccionar 2,
unión de N'F87C8670-1339-458E-8F1C-C2E9B717F4AA
seleccionar 3, unión
de N'35 ACFFFC-52CF-4805-8C30-A4EB41F3A218
..........
seleccionar 10000.
Tiempo - 7 minutes+, matados
=========================
test2 - unión TODA LA forma
=========================
Tiempo - más rápidamente que arriba. La CLASE entonces DISTINTA no se requiere. La unión en sus la propia hace un distinto
=========================
test3 - unión TODA LA forma, 100 por la hornada, separada cerca;
=========================
Tiempo - incluso más rápidamente. Cada hornada está confiada y no toma mucho la dirección en RAM. Por otra parte, el optimizador de la pregunta no pasa mucha hora en preguntas largas. El tiempo de QO sube exponencial para las preguntas largas.
=========================
test4 - la tabla truncada, inserta otra vez (siguiendo de test3 sin reajuste)
=========================
El tiempo - más rápidamente de 3. QO no tiene que hacer ninguÌn planeamiento, las 100 preguntas [de los parásitos atmosféricos] que vienen de escondrijo del plan
=========================
test5 - usar los partes movibles dados parámetros. QO planea solamente un parte movible. El resto de los partes movibles van por plan
Partes movibles generados usar
declarar el @i internacional @i=1 determinado
mientras que el @i <� 101="">comienza
imprimir “exec los valores del parte movible MyTable3 del sp_executesql N '' (@a, @a internacional, @b del @b) '', N '' nvarchar (4000) '', @a='+ a la derecha
(el @i, 10)+”
, el ''' +convert (
varchar (
máximo), el newid
del @b=N ())+ ''''
;
fijar @i=@i+1
extremo
=========================
¡Tiempo llevado - 6s! Lo más rápidamente posible.
===================
Conclusiones
(1) el optimizador de la pregunta del servidor del Sql dura exponencial para compilar más largo es el texto de la pregunta.
(2) los bloques grandes del parte movible usar la unión o valores (), (), () los patrones se sientan en un MONTÓN en memoria, después dequeued de MONTÓN en el parte movible - malo.
(3) las preguntas dadas parámetros son buenas. Mejorar si usted las trata por lotes en dice 10 partes movibles, pero cada parte movible entonces requeriría (por el ejemplo arriba) 20 parámetros en el parte movible de 10 hornadas.
(4) ** No hay prueba arriba, pero mi conjetura ** usar un SP para el parte movible, e.g @a del usp_insert, el @b que hace el parte movible y su escritura a granel de la forma
usp_insert 1, text'; del exec de N'test
usp_insert 2, text'; del exec de N'test
etc
estar tan rápidamente como los partes movibles dados parámetros usar sp_executesql, porque un SP se compila una vez solamente y re-used#.
# - que es la fuente de problemas el oler del parámetro….
Otras soluciones
Cómo fijar un número de líneas en un informe
Cómo fijar extremo del aeropuerto como servidor del DHCP en el LAN con SonicWall
Ediciones del enlace hipertexto
Agregar la fecha a MySQL
Pares de las preguntas de Apple
El DNS reverso no empareja la bandera del smtp
¿Cómo puedo funcionar conmigo PC en modo seguro?
HISTOGRAMA CON EL CP Y EL ANÁLISIS DE CPK
reglas no corrientes de la perspectiva
volver un valor