update

02/08/2005 - 22:00 por vezat | Informe spam
hola mi problema es el siguiente update demora muchisimo
la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos 25000
y aparte esta indexada por el campo persona, las estructuras de cada una son
las siguientes
debe haber alguna manera de escribirlo de manera que funcione mejor.

CREATE TABLE [dbo].[aa_escolaridades] (
[idtitulo] [binary] (10) NOT NULL ,
[description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[idnivel] [binary] (10) NOT NULL ,
[code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[idcertificado] [binary] (10) NOT NULL ,
[persona] [binary] (10) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_personas] (
[OBJECTID] [binary] (10) NOT NULL ,
[OLMARK] [int] NOT NULL ,
[ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[LOCALIDAD_NAC] [binary] (10) NULL ,
[GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NIV_ESC_COMP] [binary] (10) NULL ,
[NIV_ESC_CURSA] [binary] (10) NULL ,
[PROVINCIA_CI] [binary] (10) NULL ,
[EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[FECHA_NACIMIENTO] [datetime] NULL ,
[NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[PAIS_NAC] [binary] (10) NULL ,
[PAIS_NACIONALIDAD] [binary] (10) NULL ,
[TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PORCENTAJE_RETIRO] [int] NULL ,
[PROVINCIA_NAC] [binary] (10) NULL ,
[SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO


update t_personas
set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA aa_escolaridades.idnivel
from aa_escolaridades
where code =( select max(aa_escolaridades.code)
from aa_escolaridades
where aa_escolaridades.persona = t_personas.objectid
group by persona)

muchisimas gracias a todos
 

Leer las respuestas

#1 Alejandro Mesa
02/08/2005 - 22:41 | Informe spam
Trata:

update
t_personas
set
NIV_ESC_COMP = 0x312DA13D0CFD3931111A,
NIV_ESC_CURSA = (

select
aa_escolaridades.idnivel
from
aa_escolaridades
where
aa_escolaridades = t_personas.objectid
and code =(
select
max(a.code)
from
aa_escolaridades as a
where
a.persona = t_personas.objectid
)
)
where
exists(select * from aa_escolaridades as b where b.persona =
t_personas.objectid)
go


AMB

"vezat" wrote:

hola mi problema es el siguiente update demora muchisimo
la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos 25000
y aparte esta indexada por el campo persona, las estructuras de cada una son
las siguientes
debe haber alguna manera de escribirlo de manera que funcione mejor.

CREATE TABLE [dbo].[aa_escolaridades] (
[idtitulo] [binary] (10) NOT NULL ,
[description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[idnivel] [binary] (10) NOT NULL ,
[code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[idcertificado] [binary] (10) NOT NULL ,
[persona] [binary] (10) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_personas] (
[OBJECTID] [binary] (10) NOT NULL ,
[OLMARK] [int] NOT NULL ,
[ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[LOCALIDAD_NAC] [binary] (10) NULL ,
[GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NIV_ESC_COMP] [binary] (10) NULL ,
[NIV_ESC_CURSA] [binary] (10) NULL ,
[PROVINCIA_CI] [binary] (10) NULL ,
[EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[FECHA_NACIMIENTO] [datetime] NULL ,
[NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[PAIS_NAC] [binary] (10) NULL ,
[PAIS_NACIONALIDAD] [binary] (10) NULL ,
[TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PORCENTAJE_RETIRO] [int] NULL ,
[PROVINCIA_NAC] [binary] (10) NULL ,
[SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO


update t_personas
set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA > aa_escolaridades.idnivel
from aa_escolaridades
where code =( select max(aa_escolaridades.code)
from aa_escolaridades
where aa_escolaridades.persona = t_personas.objectid
group by persona)

muchisimas gracias a todos




Preguntas similares