Ottimizzazione delle query distribuite

Per migliorare le prestazioni, in SQL Server vengono eseguite le ottimizzazioni seguenti specifiche per le query distribuite:

  • Utilizzo dell'esecuzione remota di query con i provider di comandi SQL OLE DB.

    Un provider OLE DB è considerato un provider di comandi SQL se soddisfa i seguenti requisiti minimi:

    • Supporta l'oggetto Command e tutte le relative interfacce obbligatorie.

    • Supporta la sintassi DBPROPVAL SQL SUBMINIMUM, ISO a Entry Level o livello superiore oppure la sintassi ODBC Core Level o livello superiore. Il provider deve esporre questo livello di sottolinguaggio tramite la proprietà DBPROP_SQLSUPPORT OLE DB.

  • Utilizzo dell'accesso indicizzato con i provider di indici OLE DB.

    Un provider OLE DB è considerato un provider di indici se soddisfa i seguenti requisiti minimi:

    • Supporta l'interfaccia IDBSchemaRowset con i set di righe dello schema TABLES, COLUMNS e INDEXES.

    • Supporta l'apertura di un set di righe su un indice utilizzando IOpenRowset tramite l'indicazione del nome di indice e il corrispondente nome della tabella di base.

    • L'oggetto Index deve supportare tutte le interfacce obbligatorie, ovvero IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo e IConvertTypes.

    • I set di righe aperti nella tabella di base indicizzata utilizzando IOpenRowset devono supportare l'interfaccia IRowsetLocate per il posizionamento su una riga in base a un segnalibro recuperato dall'indice.

Esecuzione remota di query

SQL Server delega al provider di comandi SQL la maggior quantità possibile di operazioni di valutazione di una query distribuita. Una query SQL che accede solo alle tabelle remote archiviate nell'origine dei dati del provider viene estratta dalla query originale distribuita ed eseguita nel provider. Ciò riduce il numero di righe restituite dal provider e consente allo stesso di utilizzare i propri indici per la valutazione della query.

La porzione di query originale distribuita che viene delegata al provider di comandi SQL dipende dai fattori seguenti:

  • Livello di sottolinguaggio supportato dal provider di comandi SQL

  • Compatibilità delle regole di confronto

Livello di sottolinguaggio supportato dal provider di comandi SQL

In SQL Server, le operazioni vengono delegate solo se supportate dal livello di sottolinguaggio specifico. I livelli di sottolinguaggio, in ordine decrescente, sono SQL Server, ISO Entry Level, ODBC Core e Jet. Maggiore è il livello del sottolinguaggio, maggiore è il numero di operazioni che SQL Server può delegare al provider.

Nota

Se il provider corrisponde ad un server collegato SQL Server, viene utilizzato il livello di sottolinguaggio SQL Server.

Ogni livello di sottolinguaggio è un superset dei livelli inferiori. Pertanto, un'operazione delegata ad un livello specifico viene delegata anche a tutti i livelli superiori.

Le query sui tipi di dati bit e uniqueidentifer non vengono mai delegate, ma sempre valutate a livello locale.

Se l'opzione SET CONCAT_NULL_YIELDS_NULL è impostata su OFF, il concatenamento delle stringhe viene sempre eseguito a livello locale.

Le operazioni e gli elementi sintattici seguenti vengono delegati al livello di sottolinguaggio indicato ed a tutti i livelli superiori:

  • SQL Server: outer join, CUBE, ROLLUP, operatore Modulo (%), operatori bit per bit, funzioni stringa e funzioni aritmetiche di sistema.

  • ISO Entry Level: UNION e UNION ALL.

  • ODBC Core: funzioni di aggregazione con DISTINCT e costanti stringa.

  • Jet: funzioni di aggregazione senza DISTINCT, ordinamento (ORDER BY), inner join, predicati, operatori di subquery (EXISTS, ALL, SOME, IN), DISTINCT, operatori aritmetici non indicati nei livelli superiori, costanti non indicate nei livelli superiori e tutti gli operatori logici.

    Ad esempio, a un provider ISO Entry Level diverso da SQL Server possono essere delegate tutte le operazioni ad eccezione di quelle che includono CUBE, ROLLUP, outer join, operatori Modulo (%), operatori bit per bit, funzioni stringa e funzioni aritmetiche di sistema.

Compatibilità delle regole di confronto

Per una query distribuita, la semantica di confronto per tutti i caratteri è definita dal set di caratteri e dal tipo di ordinamento dell'istanza locale di SQL Server. SQL Server e supporta più regole di confronto. Le regole di confronto possono variare per ogni colonna e ad ogni valore di carattere viene associata una proprietà delle regole di confronto. SQL Server interpreta le proprietà relative alle regole di confronto dei caratteri provenienti da un'origine dei dati remota e la gestisce in modo appropriato. Per ulteriori informazioni sulle regole di confronto delle colonne remote, vedere Regole di confronto nelle query distribuite.

I confronti e le operazioni ORDER BY sulle colonne di tipo carattere vengono delegate da SQL Server a un provider, solo se viene rilevato quanto segue:

  • L'origine dei dati sottostante utilizza la sequenza di regole di confronto e il set di caratteri della colonna.

  • La semantica di confronto dei caratteri è conforme allo standard ISO e SQL Server.

Nell'argomento Regole di confronto nelle query distribuite viene fornito un riepilogo dei meccanismi tramite i quali SQL Server determina una regola di confronto per ogni colonna. Se l'origine dei dati remota supporta tali regole di confronto, il provider viene considerato compatibile a livello di regole di confronto.

Altre considerazioni relative al supporto SQL

I seguenti elementi della sintassi SQL non sono determinati dai livelli di sottolinguaggio SQL:

  • Supporto di query nidificate

    Se il provider supporta le query nidificate (subquery), in SQL Server è possibile delegare queste operazioni al provider. Poiché il supporto di query nidificate non può essere determinato automaticamente dalle proprietà OLE DB, l'amministratore di sistema dovrà impostare l'opzione del provider NestedQueries, in modo da indicare a SQL Server che il provider supporta le query nidificate.

  • Supporto degli indicatori di parametro

    Se il provider supporta l'esecuzione di query con parametri ed utilizza l'indicatore di parametro ? nelle query, in SQL Server è possibile delegare l'esecuzione delle query con parametri al provider. Poiché il supporto dell'indicatore di parametro non può essere determinato automaticamente dalle proprietà OLE DB, l'amministratore di sistema dovrà impostare l'opzione del provider DynamicParameters, in modo da indicare a SQL Server che il provider supporta gli indicatori di parametro.

  • Supporto di LIKE

    Se il provider supporta la sintassi e la semantica di implementazione di SQL Server per l'operatore LIKE, è possibile specificare l'opzione del provider SqlServerLike in modo da indicare che sono supportate.

    Per ulteriori informazioni sull'impostazione di queste opzioni del provider, vedere Configurazione dei provider OLE DB per le query distribuite.

Accesso indicizzato

In SQL Server è possibile utilizzare strategie di esecuzione che prevedono l'utilizzo degli indici del provider di indici per valutare i predicati ed eseguire operazioni di ordinamento su tabelle remote. Per consentire l'accesso indicizzato tramite un provider, impostare l'opzione del provider IndexAsAccessPath.

Se si utilizzano indici con colonne di tipo carattere, impostare inoltre l'opzione di configurazione del server collegato collation compatible su true per il server collegato corrispondente. Per ulteriori informazioni, vedere sp_serveroption (Transact-SQL).

Nota

Per determinare il piano di esecuzione di una query distribuita specifica, è possibile visualizzarlo graficamente in SQL Server Management Studio. Se il piano di esecuzione prevede l'esecuzione remota di query, questa viene rappresentata con l'operatore logico e fisico Remote Query. Nell'argomento dell'operatore viene visualizzata la query eseguita a livello remoto.