0Pricing
JavaScript Academy · Lezione

Indici e query

Interroghi i dati in modo efficiente con gli indici.

Indici e query è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 4 lezioni in totale.

Perché usare gli indici?

Per impostazione predefinita, è possibile cercare i record solo tramite la chiave primaria. Un indice consente di eseguire query in modo efficiente usando un'altra proprietà, ad esempio per trovare tutti gli utenti con un determinato cognome.

Creare un indice

Crei gli indici all'interno di onupgradeneeded, subito dopo aver creato l'object store, usando store.createIndex(name, keyPath, options).

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  const store = db.createObjectStore('users', { keyPath: 'id' });
  store.createIndex('byEmail', 'email', { unique: true });
};

Univoco e non univoco

L'opzione unique impone che nessun record condivida lo stesso valore dell'indice con un altro record. Utilizzi unique: false (il valore predefinito) quando più record possono condividere un valore, ad esempio una città.

store.createIndex('byCity', 'city', { unique: false });
store.createIndex('byEmail', 'email', { unique: true });

Eseguire query tramite un indice

Ottenga l'indice da un object store all'interno di una transazione, quindi chiami get o getAll su di esso usando il valore della proprietà indicizzata.

const tx = db.transaction('users', 'readonly');
const index = tx.objectStore('users').index('byEmail');
const req = index.get('ada@example.com');
req.onsuccess = () => console.log(req.result);

getAll

getAll() restituisce ogni record corrispondente come array con un'unica richiesta; per insiemi di risultati moderati è più semplice che iterare con un cursore.

const index = store.index('byCity');
const req = index.getAll('Paris');
req.onsuccess = () => {
  console.log('found', req.result.length, 'users in Paris');
};

Intervalli di chiavi

Un IDBKeyRange descrive un intervallo di chiavi per le query per intervallo. Tra i metodi di supporto ci sono only, lowerBound, upperBound e bound.

const range = IDBKeyRange.bound(18, 65); // ages 18..65
const index = store.index('byAge');
index.getAll(range);

Opzioni degli intervalli

IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen) può escludere gli estremi. Gli intervalli aperti sono esclusivi.

// 18 inclusive, 65 exclusive:
const range = IDBKeyRange.bound(18, 65, false, true);
// lowerBound(10) => keys >= 10
// upperBound(10, true) => keys < 10

Cursori

Per insiemi di risultati grandi o per un'iterazione personalizzata, apra un cursore con index.openCursor(range). Il cursore visita i record corrispondenti uno alla volta, evitando di caricarli tutti in memoria.

const req = store.index('byCity').openCursor();
req.onsuccess = (e) => {
  const cursor = e.target.result;
  if (cursor) {
    console.log(cursor.value);
    cursor.continue(); // move to next match
  }
};

Contare le corrispondenze

index.count(range) restituisce il numero di record corrispondenti senza recuperarli: è un'operazione rapida e con un consumo ridotto di memoria.

const req = store.index('byCity').count('Paris');
req.onsuccess = () => console.log('count:', req.result);

Ottenere solo le chiavi

getAllKeys e un cursore delle chiavi restituiscono solo le chiavi primarie dei record corrispondenti, una soluzione utile quando servono solo riferimenti e non gli oggetti completi.

const req = store.index('byCity').getAllKeys('Paris');
req.onsuccess = () => console.log('keys:', req.result);

Riepilogo delle query

Gli indici trasformano IndexedDB in un archivio interrogabile: li crei in onupgradeneeded, quindi usi get, getAll, gli intervalli di chiavi e i cursori per recuperare esattamente i record necessari.

Verifica rapida

Metta alla prova la Sua comprensione degli indici e delle query.

Riepilogo

Ha imparato a usare gli indici e le query:

  • Crei gli indici in onupgradeneeded con createIndex.
  • L'opzione unique impone valori distinti.
  • Esegua query tramite index.get / getAll.
  • IDBKeyRange consente di eseguire query per intervallo.
  • I cursori iterano gli insiemi grandi; count conta le corrispondenze.

Ora vediamo la gestione delle versioni e gli aggiornamenti.

Domande Frequenti

La lezione «Indici e query» è gratuita?

Sì — il testo completo di «Indici e query» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 4 lezioni in totale.

Cosa imparerò in «Indici e query»?

Interroghi i dati in modo efficiente con gli indici. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare JavaScript Academy?

Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Indici e query»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?

Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Aprire un database
  2. Transazioni e CRUD
  3. Indici e query
  4. Versionamento e aggiornamenti
← Torna a JavaScript Academy