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

#6 Miguel Egea
15/11/2004 - 22:33 | Informe spam
Estaría bien un ejemplo de datos , en cualuier caso parece que si creas un
índice por el campo sector, y nos dices cuando da el select count(*) de tu
misma consulta ayudaría.

Otra cosa es que si procesos.sector es igual a lecturas.sector especifícalo
en tu join, y crea un índice en la tabla procesos por los campos
(grupoproceso,idtipoproceso,sector).

Mandanos también el plan de ejecución (SET SHOWPLAN_TEXT ON)


-
Miguel Egea Gómez
Microsoft SQL-Server MVP
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Juan Barahona D." escribió en el mensaje
news:%
si lo envie, estan al final del post.
"Adrian D. Garcia" escribió en el mensaje
news:uA#
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:%
> 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
>
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida