Toon posts:

[SQL] Insert query performance

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een access database file waarin een tabel resultaat is gekoppeld met odbc aan de MSDE. Nu krijg ik elke ochtend een bestand, dat bestand is exact dezelfde tabel in een mdb file, maar dan met meer informatie, aangevuld dus. Mijn tabel moet dus een soort van overschreven worden.

Wat ik kan doen is de tabel in de MSDE verwijderen en de gehele nieuwe tabel importeren middels VBA. Maar dan ben ik wel de relaties en referenties en triggers kwijt. DIt suckt dus.

Wat heb ik gedaan, hij gooit heel de tabel leeg in de MSDE en herindexeerd de tabel zodat de autonummering weer op 1 begint. Nu voer ik een append query uit. Maar met 7000 records duurt dit 6,5 minuten. Dat is niet acceptabel. Heb ik nog meer mogelijkheden.

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

een UPDATE query ?

mijn T.net systeemspecspagina


Verwijderd

Topicstarter
Dat kan niet, er zijn records die gewijzigd worden, gedeleted worden of toegevoegd worden.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Bekent probleem, wij hebben het laatst zo gedaan:

aan de hand van elk record wordt een unieke value bepaalt. De hele import komt in een geclonede table, vervolgens run je een query die alle records vervangt waarvan de unieke value niet overeenkomt.

Klinkt lastiger als het is maar het werkt perfect

Verwijderd

Topicstarter
Maar dan heb je niet het probleem met de verwijderde records en toegevoegde records opgelost.

Verwijderd

Topicstarter
Je hebt een functie om een tabel te importeren. Deze functie heeft de mogelijkheid om structure only te doen. Maar ik wil data only. Wat ik natuurlijk wel kan proberen is heel de tabel te importeren als een nieuwe tabel, en deze vervolgens te inserten in de originele. Hij hoeft dan niet record voor record uit het bestand te halen maar de server doet dat allemaal direct zelf. Zou dit werken??? en zou de performance omhoog gaan??

  • tazitiz
  • Registratie: Augustus 1999
  • Laatst online: 09-06 22:25

tazitiz

dbprutser

je kan het ook ingewikkelder doen, eerst een temp tabel maken met records die niet hetzelfde zijn, alle records uit de huidige verwijderen en de veranderingen toevoegen, maar dan zit je natuurlijk met de id, die dan niet meer synchroon loopt.

Verwijderd

Topicstarter
Ik kan heel de tabel als volgt inserten in sql server:
Function test()
Dim db As database
Dim source As String
Dim target As String
Dim q As String

Set db = CurrentDb()
source = "[c:\FBAserver\importTM\TMSmallimport.mdb].[Resultaat]"

target = "[ODBC;DSN=FBAserver;UID=sa;PWD=;].[Resultaat_import]"

q = "Select * into " & target & " from " & source
DoCmd.RunSQL q

End Function

Verwijderd

Topicstarter
Ik zit met nog iets. Voordat ik de records ga inserten moet de tabel leeg. Een delete query duurt te lang. In Mysql heb je een functie als Empty, heb je die ook in SQL server??

Verwijderd

Topicstarter
Nouja, niet een succes. Het lukt wel op deze manier, maar nog steeds traaaaaaGGG!!!!. Ohja, een tabel leegmaken en automatische reseeden is truncate table table_name

  • Rukapul
  • Registratie: Februari 2000
  • Nu online
Kun je niet beter de tabel vullen en daarna pas de index aanmaken. Het is bekend dat indices insert queries vertragen. Je moet dan alleen je ID dat automatisch ophoogt zelf ophogen bij de insert, maar dat is geen probleem aangezien je alles sequentieel in een loopje insert.

Verwijderd

Topicstarter
Het moet ook met de functie BULK INSERT kunnen, weet iemand hoe dat werkt.

Verwijderd

Topicstarter
TransferObjectsTask CopyData

Hiermee moet het ook kunnen maar hoe??

Verwijderd

Topicstarter
Dit heb ik nu voor elkaar. Ik heb met de DTSwiz.exe een DTS package aangemaakt. Deze roep ik gewoon via de shell aan. Als volgt

dtsrun.exe /S servername /N ResultatenImportDTS

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Vraag:
Is het binnenkomende bestand gesorteerd op een bepaald veld?

Een mogelijk oplossing:
Lees de tabel in in een temp-tabel en vergelijk die inhoud met de inhoud van je huidige tabel, bapaal aan de hand van deze vergelijking welke records gewijzigid zijn, nieuw zijn en welke weg kunnen. Hierna start je de verwerking op van deze analyse.
Hierdoor blijft je huidige tabel gewoon on-line en worden de wijzigingen gewoon doorgevoerd.
Pagina: 1