Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jakie klucze dobrać do tabeli ?
Forum PHP.pl > Forum > Bazy danych > MySQL
gothye
witam
posiadam tabele w której gromadzę wydarzenia wg daty oraz typu (max 20 typów) ,tabela będzie zawierać max 100.000 rekordów ,a dane będą wyszukiwane według typu i daty , chciałbym założyć odpowiednie klucze dla tabeli aby przyśpieszyć wyszukiwanie rekordów z tabeli.

  1. CREATE TABLE IF NOT EXISTS `occurred` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `date` date NOT NULL,
  4. `type` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
  5. `text` text NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
tr@k
Skoro wyszukujesz według typu i daty to daj indeksy właśnie na te pola, jeśli zawsze wyszukujesz po obu to wystarczy jeden index na 2 pola.
mkozak
Jeżeli będziesz używał zawsze typu i daty to tak:

  1. ALTER TABLE `occurred` ADD INDEX ( `type` , `date` ) ;


Kolejność nie jest przypadkowa. Dla zapytań tylko z datą lepszy był by klucz zapisany `date`,`type`. Sam musisz sobie odpowiedzieć na pytanie, czy czasem zdarzy ci się używać do wyszukiwania samej daty.
phpion
@mkozak:
Ja bym z założenia zrobił indeks na obu kolumnach, ale w odwrotnej kolejności niż Ty podałeś (czyli najpierw date, potem type). Dlaczego? Domyślam się, że w polu date będzie większy "rozrzut" danych, natomiast kolumna type będzie zawierała zapewne kilka z góry zdefiniowanych wartości (np. od 1 do 10). W takim przypadku mój indeks będzie wydajniejszy od Twojego. No i od razu mamy możliwość wyszukiwania tylko i wyłącznie po dacie. Typ? No coś za coś smile.gif Zawsze można dodać kolejny indeks tylko dla typu, ale to może okazać się zbędne (konieczna będzie analiza użycia indeksów po jakimś czasie użytkowania).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.