Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacjia zapytań - Index'y
Forum PHP.pl > Forum > Bazy danych > MySQL
Avatarus
Witam. Mam takie pytanie
Jest sobie taka tabela
  1. CREATE TABLE `fusion_photos` (
  2. `photo_id` bigint(7) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `album_id` bigint(7) UNSIGNED NOT NULL DEFAULT '0',
  4. `photo_title` varchar(100) NOT NULL DEFAULT '',
  5. `photo_description` text NOT NULL,
  6. `photo_filename` varchar(100) NOT NULL DEFAULT '',
  7. `photo_thumb1` varchar(100) NOT NULL DEFAULT '',
  8. `photo_thumb2` varchar(100) NOT NULL DEFAULT '',
  9. `photo_datestamp` int(10) UNSIGNED NOT NULL DEFAULT '0',
  10. `photo_user` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
  11. `photo_views` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
  12. `photo_order` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
  13. `photo_allow_comments` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
  14. `photo_allow_ratings` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
  15. PRIMARY KEY (`photo_id`),
  16. KEY `album_id_idx` (`album_id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4061 ;


Jak widać jest w niej proszę ponad 4k rekordów. Nie tak dużo...ale jednak.
Widać też że są nałożone indexy na pola photo_id i album_id

Mam pytanie (zasadniczo jestem prawie pewny odpowiedzi, ale wole się upewnić). Czy jeśli gdzieś w skrypcie chce sobie wyświetlić foty z tej tabe;lei sortując je według photo_datestamp to czy dobrym posunięciem jest stworzenie indexu dla tego pola?

Wiem że tabela urośnie, ale chyba będzie działać szybciej i mniej obciąży serwer.

No i jak to jest z tym indexem. Jest on tworzony ale co jest w środku? On pamięta ostatnie posortowanie?

Z góry dzięki za pomoc.
kitol
Index to tak jakby duplikat istniejącej kolumny. Zawiera te same dane, ale posortowane. Zwiększa objętość, ale w niektórych przypadkach przyśpiesza sortowanie, wyszukiwanie i łączenie tabel. Indeksy nie wymagają żadnej obsługi. Wszystkim zajmuje się baza. Po szczegóły sięgnij do manuala.

ODP. Powinieneś założyć indeks na photo_datestamp.
Avatarus
Cytat
Zawiera te same dane, ale posortowane
no dobra rozumie posortowane ale jak?
Według jakich kryteri? Alfabetycznie od największej do najmniejszej, a może na odwrót?
A może sortuje się tak jak było wykonywane polecenie SLQ. Jeśli np ostatnio wykonany zapytanie SQL z opcja order by photo_datestamp DESC to indexy są posortowane od największych do najmniejszych? No i jeśli potem zostanie wykonane zapytanie z tymi kryteriami to skorzysta z indexów.
Czy tak to się odbywa?
kitol
Nie ma znaczenia czy indeksy posortowane są rosnąco czy malejąco. Ważne że są. Po prostu baza ten indwks może "przejrzeć" od końca lub od początku i nie musi sortować podczas wykonywania zapytania. Sortowanie w indeksie następuje po wszystkich kolumnach indeksu w kolejności od pierwszego do ostatniego. W twoim wypadku wystarczy że założysz indeks na kolumnę photo_datestamp. Niczym więcej nie musisz się martwić smile.gif
Avatarus
no ja już wiem że to będzie działać itp biggrin.gif
Po prostu jestem ciekaw jak co tam dokładnie siedzi w tym indexie biggrin.gif
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.