Optimizacion Indices,

04/11/2004 - 19:34 por Juan Barahona D. | Informe spam
Participantes: del foro realizo esta consulta para buscar la informacion de
meses anteriores
de un cliente, en la tabla lecturas_consumo (4.427.798 reg(s)) con INNER
Joins en la
tabla procesos (500) , lectores (120), en el momento en que empieza la
produccion de la empresa
(6 usuarios trabajando), esta query se demora alrededor de 1:05 minutos
tiempo no razonables
para lo que va avanzado de tecnologia. Pido porfavor alguna guia de como
manejar algun indices,
y/o optimizacion de la base en sí, o alguna experiencia pasada en este temas
de muchos registros.
Utilizo Sql 7.0, vbasic 6.0,.
Estuve leyendo algo en los BOL pero no encuentro algo un poco mas claro,
saludos JuanE, desde Chile!.



SELECT Procesos.grupo_proceso as proceso, lecturas_consumo.fecha_lectura+'
'+
lecturas_consumo.hora_ingreso as fecha_lectura ,
lecturas_consumo.medidor,lecturas_consumo.corr_medidor,lecturas_consumo.clav
e_lectura ,
lecturas_consumo.lectura,lectores.cod_lector,
lecturas_consumo.irreg_1 , lecturas_consumo.irreg_2,
lecturas_consumo.irreg_3, lecturas_consumo.irreg_4,
CASE WHEN lecturas_consumo.atendido=0 THEN 'Pendiente' WHEN
lecturas_consumo.atendido=1
THEN 'Efectivo' WHEN lecturas_consumo.atendido=2 THEN 'Improcedente'
END AS Estado From lecturas_consumo
INNER JOIN Procesos ON lecturas_consumo.id_grupoproceso Procesos.id_grupoproceso
full join [CHILECTRA].[dbo].[lectores] as lectores on
lecturas_consumo.id_lector=lectores.id_lector
WHERE lecturas_consumo.id_servicio 480
AND procesos.id_tipoproceso=1 AND procesos.sector
AND lecturas_consumo.sector ORDER by lecturas_consumo.id_lectura DESC





CREATE TABLE [dbo].[lecturas_consumo] (
[id_lectura] [int] IDENTITY (1, 1) NOT NULL ,
[id_servicio] [int] NOT NULL ,
[medidor] [int] NOT NULL ,
[corr_medidor] [nvarchar] (1) NOT NULL ,
[id_grupoproceso] [int] NOT NULL ,
[id_comuna] [int] NOT NULL ,
[id_lector] [int] NULL ,
[cod_lector] [nvarchar] (4) NULL ,
[id_zona] [int] NOT NULL ,
[sector] [int] NOT NULL ,
[libreta] [int] NOT NULL ,
[orden_ruta] [int] NOT NULL ,
[fecha_lectura] [smalldatetime] NOT NULL ,
[clave_lectura] [nvarchar] (2) NULL ,
[hora_ingreso] [nvarchar] (8) NULL ,
[tipo_medicion] [smallint] NOT NULL ,
[irreg_1] [nvarchar] (2) NULL ,
[irreg_2] [nvarchar] (2) NULL ,
[irreg_3] [nvarchar] (2) NULL ,
[irreg_4] [nvarchar] (2) NULL ,
[verif_lect] [smallint] NOT NULL ,
[num_folio] [nvarchar] (8) NULL ,
[lect_min] [int] NOT NULL ,
[lect_max] [int] NOT NULL ,
[cons_promedio] [numeric](18, 2) NOT NULL ,
[cliente_cerrado] [smallint] NOT NULL ,
[lectura] [nvarchar] (8) NULL ,
[estado] [smallint] NOT NULL ,
[atendido] [smallint] NOT NULL ,
[id_usuario] [int] NOT NULL
)
GO

CREATE CLUSTERED INDEX [indice_id_servicio] ON
[dbo].[lecturas_consumo]([id_servicio]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[lecturas_consumo] WITH NOCHECK ADD
CONSTRAINT [DF_lecturas_consumo_corr_medidor_1] DEFAULT (0) FOR
[corr_medidor],
CONSTRAINT [DF_lecturas_consumo_id_grupoproceso_1] DEFAULT (0) FOR
[id_grupoproceso],
CONSTRAINT [DF_lecturas_consumo_id_comuna_1] DEFAULT (0) FOR [id_comuna],
CONSTRAINT [DF_lecturas_consumo_id_lector_1] DEFAULT (0) FOR [id_lector],
CONSTRAINT [DF_lecturas_consumo_id_zona] DEFAULT (0) FOR [id_zona],
CONSTRAINT [DF_lecturas_consumo_sector] DEFAULT (0) FOR [sector],
CONSTRAINT [DF_lecturas_consumo_libreta] DEFAULT (0) FOR [libreta],
CONSTRAINT [DF_lecturas_consumo_orden_ruta] DEFAULT (0) FOR [orden_ruta],
CONSTRAINT [DF_lecturas_consumo_tipo_medicion] DEFAULT (0) FOR
[tipo_medicion],
CONSTRAINT [DF_lecturas_consumo_verif_lect_1] DEFAULT (0) FOR [verif_lect],
CONSTRAINT [DF_lecturas_consumo_num_folio] DEFAULT (0) FOR [num_folio],
CONSTRAINT [DF_lecturas_consumo_lect_min_1] DEFAULT (0) FOR [lect_min],
CONSTRAINT [DF_lecturas_consumo_lect_max_1] DEFAULT (0) FOR [lect_max],
CONSTRAINT [DF_lecturas_consumo_cons_promedio_1] DEFAULT (0) FOR
[cons_promedio],
CONSTRAINT [DF_lecturas_consumo_cliente_cerrado_1] DEFAULT (0) FOR
[cliente_cerrado],
CONSTRAINT [DF_lecturas_consumo_lectura_1] DEFAULT (0) FOR [lectura],
CONSTRAINT [DF_lecturas_consumo_estado_1] DEFAULT (0) FOR [estado],
CONSTRAINT [DF_lecturas_consumo_atendido_1] DEFAULT (0) FOR [atendido],
CONSTRAINT [DF_lecturas_consumo_id_usuario_1] DEFAULT (0) FOR [id_usuario],
CONSTRAINT [PK_lecturas_consumo_1] PRIMARY KEY NONCLUSTERED
(
[id_lectura]
) ON [PRIMARY]
GO



Juan Barahona D.
Analista de Sistemas
Departamento de Informática, ALCIA Ltda.
Fono: 247 44 22 Fax: 247 44 23
alcia_jbarahona@entelchile.net

Preguntas similare

Leer las respuestas

#1 Isaias
04/11/2004 - 22:43 | Informe spam
Algo muy sencillo, aunque se me ha criticado cada que lo posteo.

REVISTE las columnas que tiene despues del WHERE, invariablemente deberian
ser INDICE en su tabla(s).
#2 MAXI
04/11/2004 - 23:50 | Informe spam
jaja amigo!! sabes que pasa que esa regla es un tanto de libro che :-ppppppp

Mira, lo mejor que puede hacer nuestro amigo (a mi criterio) es que use el
asistente para optimizacion de indices que trae el mismo Query Analizer :-)




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Isaias" escribió en el mensaje
news:
Mostrar la cita
#3 qwalgrande
05/11/2004 - 10:10 | Informe spam
Hola.

Dos pistas:
La primera, sería de gran utilidad que miraras el número de lecturas lógicas
que se hace de cada tabla cuando ejecutas la consulta, así como el plan de
ejecución. Para ello, con Query Analyzer, pulsa Ctrl + K (plan de ejcución) y
ejecuta "set statistics io on" (para que te dé las lecturas) y luego la
consulta. Así sabremos qué tabla o tablas debemos indexar. Si con ese
resultado no sabes tampoco por dónde indexar, nos comentas.
La segunda pista, es posible que tengas problemas de bloqueos, ya que
comentas que los problemas se te producen cuando empiezan a trabajar los
usuarios. Prueba a bajar el nivel de aislamiento, puedes indicar "set
transaction isolation level read uncommitted" al inicio de la consulta y
dentro de la misma ejecución. Si el tiempo de ejecución se mantiene el
problema es sólo de índices, si no, puede que sea de bloqueos.

qwalgrande

"Juan Barahona D." wrote:

Mostrar la cita
#4 Adrian D. Garcia
07/11/2004 - 15:58 | Informe spam
Podrias enviar por el foro el query y la estructura de las tablas incluyendo
sus indices y calves primarias?

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Juan Barahona D." wrote in message
news:%
Mostrar la cita
de
Mostrar la cita
temas
Mostrar la cita
lecturas_consumo.medidor,lecturas_consumo.corr_medidor,lecturas_consumo.clav
Mostrar la cita
[verif_lect],
Mostrar la cita
[id_usuario],
Mostrar la cita
#5 Juan Barahona D.
10/11/2004 - 18:56 | Informe spam
si lo envie, estan al final del post.
"Adrian D. Garcia" escribió en el mensaje
news:uA#
Mostrar la cita
incluyendo
Mostrar la cita
INNER
Mostrar la cita
como
Mostrar la cita
lecturas_consumo.fecha_lectura+'
Mostrar la cita
lecturas_consumo.medidor,lecturas_consumo.corr_medidor,lecturas_consumo.clav
Mostrar la cita
DESC
Mostrar la cita
[id_comuna],
Mostrar la cita
[id_lector],
Mostrar la cita
[orden_ruta],
Mostrar la cita
Ads by Google
Search Busqueda sugerida