[MSSQL Ex] Sincronismo tra due tabelle da 8 milioni di records

martedì 19 febbraio 2008 - 14.42

mir Profilo | Newbie

Ho questo codice che funziona perfettamente:

--******************** use tempdb go create table UNO (campo1 datetime, campo2 smallint) go create table DUE (campo3 datetime, campo4 smallint, campo5 datetime, delta smallint) go insert into UNO (campo1,campo2) values ('7-07-19 01:08:03.902',1) insert into UNO (campo1,campo2) values ('7-07-19 01:08:05.903',0) insert into UNO (campo1,campo2) values ('7-07-19 01:08:07.905',0) insert into UNO (campo1,campo2) values ('7-07-19 01:08:09.912',1) insert into UNO (campo1,campo2) values ('7-07-19 01:08:11.915',0) insert into UNO (campo1,campo2) values ('7-07-19 01:08:16.915',0) insert into UNO (campo1,campo2) values ('7-07-19 01:08:22.915',1) insert into UNO (campo1,campo2) values ('7-07-19 01:08:24.915',1) insert into UNO (campo1,campo2) values ('7-07-19 01:08:33.915',0) insert into UNO (campo1,campo2) values ('7-07-19 01:09:18.915',1) insert into UNO (campo1,campo2) values ('7-07-19 01:12:22.900',0) insert into UNO (campo1,campo2) values ('7-07-19 01:14:25.903',1) insert into UNO (campo1,campo2) values ('7-07-19 01:16:01.915',1) go insert into DUE (campo3) values ('7-07-19 01:08:11.902') insert into DUE (campo3) values ('7-07-19 01:08:04.903') insert into DUE (campo3) values ('7-07-19 01:08:07.903') insert into DUE (campo3) values ('7-07-19 01:08:32.963') insert into DUE (campo3) values ('7-07-19 01:08:10.903') insert into DUE (campo3) values ('7-07-19 01:08:14.903') insert into DUE (campo3) values ('7-07-19 01:08:28.903') insert into DUE (campo3) values ('7-07-19 01:08:32.903') insert into DUE (campo3) values ('7-07-19 01:08:48.903') insert into DUE (campo3) values ('7-07-19 01:09:14.915') insert into DUE (campo3) values ('7-07-19 01:12:25.900') insert into DUE (campo3) values ('7-07-19 01:14:26.903') insert into DUE (campo3) values ('7-07-19 01:16:00.915') go select * from UNO order by Campo1 go -- dichiaro variabili intervallo di tempo sulla JIMP DECLARE @down AS datetime SET @down = '7-07-19 01:08:07.912' DECLARE @up AS datetime SET @up = '7-07-19 01:09:25.912' update DUE set Campo4=v.Campo2, Campo5=v.Campo1 from DUE t1 cross apply ( select top 1 Campo1,Campo2 from UNO t2 where abs(datediff(second, t2.Campo1, t1.Campo3)) <2 and t2.Campo1>=@down and t2.Campo1<@up order by abs(datediff(second, t2.Campo1, t1.Campo3)) ) v go update DUE set delta=abs(datediff(second,campo5,campo3)) go select * from DUE order by DUE.Campo3 go drop table UNO go drop table DUE --********************


Le tabelle sono molto grandi, circa 8 milioni di records ciascuna e lanciando la sincronizzazione su tutto non ho ottenuto risultati dopo 4 ore di elaborazione. Inserendo delle condizioni di where (nell'apply) ottengo risultati corretti ma con tempi di circa un record al secondo (30 minuti di dati vengono sincronizzati con questa query in circa 30 minuti!)

A qualcuno viene in mente una soluzione che ottimizzi le prestazioni del DB diminuendo "drasticamente" i tempi di lavoro?

Grazie di qualsiasi aiuto
mir

alx_81 Profilo | Guru

>A qualcuno viene in mente una soluzione che ottimizzi le prestazioni
>del DB diminuendo "drasticamente" i tempi di lavoro?
Ciao, potresti spiegarmi un po' quello che vuoi fare?
perchè temo di non aver capito nulla . L'esempio è ok, spiegami che cosa volevi ottenere partendo da cosa così forse riesco ad essere di aiuto
>Grazie di qualsiasi aiuto
Grazie a te
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mir Profilo | Newbie

Grazie ma sono riuscito a risolvere ...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5