sql >> Databasteknik >  >> RDS >> Sqlserver

SQL 2005 - Länkad server till Oracle-frågor extremt långsamma

I ditt första exempel med "dot"-notation används klientmarkörmotorn och det mesta utvärderas lokalt. Om du väljer från en stor tabell och använder en WHERE-sats, kommer posterna att dras ned lokalt från fjärrdb. När data väl har dragits över den länkade servern tillämpas WHERE-satsen lokalt först då. Ofta är denna sekvens en prestationshit. Index på fjärrdb görs i princip oanvändbara.

När du använder OPENQUERY skickar SQL Server sql-satsen till måldatabasen för bearbetning. Under bearbetning utnyttjas eventuella index på tabellerna. Även where-satsen tillämpas på Oracle-sidan innan resultatuppsättningen skickas tillbaka till SQL Server.

Enligt min erfarenhet, förutom de enklaste frågorna, kommer OPENQUERY att ge dig bättre prestanda.

Jag skulle rekommendera att använda OpenQuery för allt av ovanstående skäl.

En av smärtpunkterna när du använder OpenQuery som du kanske redan har stött på är enstaka citattecken. Om sql-strängen som skickas till fjärrdb kräver enstaka citattecken runt en sträng eller ett datum måste de escapes. Annars avslutar de oavsiktligt sql-strängen.

Här är en mall som jag använder när jag har att göra med variabler i en openquery-sats till en länkad server för att ta hand om problemet med enstaka citat:

DECLARE @UniqueId int 
, @sql varchar(500) 
, @linkedserver varchar(30) 
, @statement varchar(600) 

SET @UniqueId = 2 

SET @linkedserver = 'LINKSERV' 
SET @sql = 'SELECT DummyFunction(''''' + CAST(@UniqueId AS VARCHAR(10))+ ''''') FROM DUAL' 
SET @statement = 'SELECT * FROM OPENQUERY(' + @linkedserver + ', '  
SET @Statement = @Statement + '''' +  @SQL + ''')' 
EXEC(@Statement) 



  1. PL/SQL:Fel PLS-00306:fel nummer eller typer av argument i anrop till utlöst för siffertabell

  2. Python psycopg2 copy_from() för att ladda data kastar fel för nollheltalsvärden:DataError:ogiltig indatasyntax för heltal:

  3. Kör db-fråga (sql-server 2005) med ajax. Är det möjligt?

  4. Välj ..... där .... ELLER