Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gli indici consentono di accedere a modelli di query alternativi e possono velocizzare le query. In questa sezione viene eseguito il confronto delle operazioni di creazione e utilizzo dell'indice in SQL e in Amazon DynamoDB.
Che si stia utilizzando un database relazionale o DynamoDB, è necessario eseguire con attenzione la creazione dell'indice. Ogni volta che una scrittura si verifica su una tabella, tutti gli indici della tabella devono essere aggiornati. In un ambiente di scrittura con tabelle di grandi dimensioni, questa operazione può consumare grandi quantità di risorse di sistema. In un ambiente di sola lettura o pressoché di sola lettura, questa operazione non costituisce un problema, ma devi assicurarti che gli indici vengano effettivamente utilizzati dall'applicazione e non occupino semplicemente spazio.
Argomenti
Differenze tra un database relazionale (SQL) e DynamoDB durante la creazione di un indice
Confrontare l'istruzione CREATE INDEX
in SQL con l'operazione UpdateTable
in Amazon DynamoDB.
Creazione di un indice con SQL
In un database relazionale, un indice è una struttura di dati che ti consente di eseguire query veloci su colonne diverse in una tabella. Puoi utilizzare l'istruzione SQL CREATE
INDEX
per aggiungere un indice a una tabella esistente, specificando le colonne da indicizzare. Dopo aver creato l'indice, puoi eseguire una query sui dati della tabella come di consueto, ma ora il database può utilizzare l'indice per trovare rapidamente le righe specificate nella tabella anziché eseguire la scansione dell'intera tabella.
Dopo aver creato un indice, il database lo gestisce automaticamente. Ogni volta che modifichi i dati nella tabella, l'indice viene modificato automaticamente per riflettere le modifiche nella tabella.
In MySQL, puoi creare un indice simile al seguente.
CREATE INDEX GenreAndPriceIndex
ON Music (genre, price);
Creazione di un indice in DynamoDB
In , puoi creare e usare un per scopi simili.
Gli indici in DynamoDB sono diversi dalle rispettive controparti relazionali. Quando crei un indice secondario globale, specifica una chiave di partizione e opzionalmente una chiave di ordinamento. Dopo aver creato l'indice secondario, è possibileQuery
oScan
proprio come faresti con un tavolo. DynamoDB non dispone di un ottimizzatore di query, quindi un indice secondario viene utilizzato solo quandoQuery
oScan
esso.
DynamoDB supporta due diversi tipi di indici:
-
Indici secondari globali: la chiave primaria dell'indice può essere qualsiasi due attributi della relativa tabella.
-
Indici secondari locali: la chiave di partizione dell'indice deve essere uguale a quella della chiave di partizione della tabella. Tuttavia, la chiave di ordinamento può essere un qualsiasi altro attributo.
assicura che i dati in un sono consistenti con la tabella. Puoi richiedere operazioni Query
o Scan
ad elevata consistenza su una tabella o un indice secondario locale. Tuttavia, gli indici secondari globali supportano solo la consistenza finale.
È possibile aggiungere un indice secondario globale a una tabella esistente utilizzando l'operazione UpdateTable
e specificando GlobalSecondaryIndexUpdates
.
{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }
Dovrai fornire i seguenti parametri a UpdateTable
:
-
TableName
— La tabella a cui verrà associato l'indice. -
AttributeDefinitions
— I tipi di dati per gli attributi dello schema chiave dell'indice. -
GlobalSecondaryIndexUpdates
— Dettagli sull'indice che desideri creare:-
IndexName
: un nome per l'indice. -
KeySchema
— Gli attributi utilizzati per la chiave primaria dell'indice. -
Projection
- Specifica gli attributi che vengono copiati (proiettati) dalla tabella nell'indice. In questo caso,ALL
significa che tutti gli attributi sono copiati. -
ProvisionedThroughput (for provisioned tables)
— Il numero di letture e scritture al secondo necessarie per questo indice. Questo valore è separato dalle impostazioni di throughput assegnato dalla tabella.
-
Parte di questa operazione comporta la compilazione dei dati dalla tabella nel nuovo indice. Durante la compilazione la tabella rimane disponibile. Tuttavia, l'indice non è pronto fino a quando l'attributo Backfilling
cambia da true a false. Puoi utilizzare l'operazione DescribeTable
per visualizzare questo attributo.
Differenze tra un database relazionale (SQL) e DynamoDB durante l'interrogazione e la scansione di un indice
Confrontare l'esecuzione di query e scansione di un indice usando l'istruzione SELECT (SELEZIONA) in SQL con le operazioni Query
e Scan
in Amazon DynamoDB.
Argomenti
Esecuzione di query e scansione di un indice con SQL
In un database relazionale, non si lavora direttamente con gli indici. Si eseguono invece query sulle tabelle emettendo istruzioni SELECT
in modo che l'ottimizzatore di query possa fare uso di qualsiasi indice.
Un ottimizzatore di query è un componente dei sistemi di gestione di database relazionali (RDBMS) che valuta gli indici disponibili e determina se possono essere utilizzati per accelerare una query. Se gli indici possono essere utilizzati per accelerare una query, RDBMS accede prima all'indice e quindi lo utilizza per individuare i dati nella tabella.
Ecco alcune istruzioni SQL che possono essere utilizzate GenreAndPriceIndexper migliorare le prestazioni. Supponiamo che la tabella Music contenga i dati sufficienti che l'ottimizzatore di query decida di usare questo indice, piuttosto che scansionare l'intera tabella.
/* All of the rock songs */
SELECT * FROM Music
WHERE Genre = 'Rock';
/* All of the cheap country songs */
SELECT Artist, SongTitle, Price FROM Music
WHERE Genre = 'Country' AND Price < 0.50;
Esecuzione di query e scansione di un indice in DynamoDB
In DynamoDB, le operazioni Query
e Scan
vengono eseguite direttamente sull'indice, nello stesso modo in cui vengono eseguite su una tabella. Puoi utilizzare l'API DynamoDB o PartiQL, un linguaggio di query compatibile con SQL, per eseguire query o effettuare la scansione dell'indice. Devi specificare TableName
e IndexName
.
Di seguito sono riportate alcune domande su GenreAndPriceIndexDynamoDB. Lo schema della chiave per l'indice è composto dagli attributi Genre e Price.
// All of the rock songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre", ExpressionAttributeValues: { ":genre": "Rock" }, };
Questo esempio utilizza un ProjectionExpression
per indicare che si vogliono solo alcuni degli attributi, piuttosto che tutti, nei risultati.
// All of the cheap country songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre and Price < :price", ExpressionAttributeValues: { ":genre": "Country", ":price": 0.50 }, ProjectionExpression: "Artist, SongTitle, Price" };
Di seguito è riportata una scansione in corso. GenreAndPriceIndex
// Return all of the data in the index { TableName: "Music", IndexName: "GenreAndPriceIndex" }