Ho due server di database, collegati tramite server collegati. Entrambi sono database SQL Server 2008R2 e la connessione al server collegato viene stabilita tramite un normale link "SQL Server", utilizzando il contesto di sicurezza dell'account di accesso corrente. I server collegati sono entrambi nello stesso datacenter, quindi la connessione non dovrebbe essere un problema.
Uso la seguente query per verificare quali valori della colonna identifier
sono disponibili in remoto, ma non localmente.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
Su entrambe le tabelle sono presenti indici non cluster sulla colonna identifier
. A livello locale sono circa 2,6 milioni di righe, solo 54 in remoto. Tuttavia, quando si esamina il piano di query, il 70% del tempo di esecuzione è dedicato all'esecuzione di query remote. Inoltre, quando si studia il piano di query completo, il numero di righe locali stimate è 1
invece di 2695380
(che è il numero di righe stimate quando si seleziona solo la query successiva EXCEPT
).
Quando si esegue questa query, ci vuole davvero molto tempo.
Mi chiedo: perché è questo? La stima è "appena" lontana o le query remote su server collegati sono davvero così costose?