0Pricing
JavaScript Academy · Lekcja

Indeksy i zapytania

Proszę wydajnie odpytywać dane za pomocą indeksów.

Indeksy i zapytania to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 4 lekcji w sumie.

Po co są indeksy?

Domyślnie rekordy można wyszukiwać tylko po kluczu głównym. Indeks pozwala wydajnie wykonywać zapytania według innej właściwości, na przykład znaleźć wszystkich użytkowników o określonym nazwisku.

Tworzenie indeksu

Indeksy należy tworzyć wewnątrz onupgradeneeded, zaraz po utworzeniu magazynu, za pomocą 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 });
};

Unikatowe i nieunikatowe

Opcja unique wymusza, aby żadne dwa rekordy nie miały tej samej wartości indeksu. Należy użyć unique: false (ustawienia domyślnego), gdy wiele rekordów może mieć tę samą wartość, na przykład nazwę miasta.

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

Wykonywanie zapytań przez indeks

Indeks należy pobrać z magazynu w ramach transakcji, a następnie wywołać na nim get lub getAll, przekazując wartość indeksowanej właściwości.

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() zwraca wszystkie pasujące rekordy jako tablicę w ramach jednego żądania, co w przypadku umiarkowanych zbiorów wyników jest prostsze niż iterowanie za pomocą kursora.

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

Zakresy kluczy

Obiekt IDBKeyRange opisuje zakres kluczy używany w zapytaniach zakresowych. Dostępne pomocnicze metody to między innymi only, lowerBound, upperBound i bound.

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

Opcje granic zakresu

IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen) może wykluczać końce zakresu. Otwarte granice są wyłączne.

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

Kursory

W przypadku dużych zbiorów wyników lub niestandardowego iterowania należy otworzyć kursor za pomocą index.openCursor(range). Odwiedza on pasujące rekordy pojedynczo, dzięki czemu nie trzeba ładować wszystkiego do pamięci.

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
  }
};

Zliczanie dopasowań

index.count(range) zwraca liczbę pasujących rekordów bez ich pobierania, dzięki czemu działa szybko i zużywa niewiele pamięci.

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

Pobieranie samych kluczy

getAllKeys i kursor kluczy zwracają tylko klucze główne pasujących rekordów. Jest to przydatne, gdy potrzebne są wyłącznie odwołania, a nie całe obiekty.

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

Podsumowanie zapytań

Indeksy zamieniają IndexedDB w magazyn danych, w którym można wykonywać zapytania: należy utworzyć je w onupgradeneeded, a następnie używać get, getAll, zakresów kluczy i kursorów, aby pobierać dokładnie te rekordy, które są potrzebne.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat indeksów i zapytań.

Podsumowanie

Dowiedział się Pan / Dowiedziała się Pani, czym są indeksy i zapytania:

  • Indeksy tworzy się w onupgradeneeded za pomocą createIndex.
  • Opcja unique wymusza unikatowe wartości.
  • Zapytania wykonuje się za pomocą index.get / getAll.
  • IDBKeyRange umożliwia wykonywanie zapytań zakresowych.
  • Kursory służą do iterowania po dużych zbiorach, a count zlicza dopasowania.

Następnie wersjonowanie i aktualizacje.

Często zadawane pytania

Czy lekcja „Indeksy i zapytania” jest bezpłatna?

Tak — pełny tekst „Indeksy i zapytania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Indeksy i zapytania”?

Proszę wydajnie odpytywać dane za pomocą indeksów. Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Indeksy i zapytania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Otwieranie bazy danych
  2. Transakcje i CRUD
  3. Indeksy i zapytania
  4. Wersjonowanie i aktualizacje
← Powrót do JavaScript Academy