Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytań
Forum PHP.pl > Forum > Bazy danych > MySQL
Fifi209
Witam, chciałbym jakoś "ładniej" napisać zapytania, które zaraz przedstawię, lecz najpierw struktura bazy danych:

Tabla files:
id
user_id
name
count
visible
patch

Tabla users:
id
group_id
name
password
mail
key
active
date
last

Chcę wyciągnąć 5 ostatnio dodanych plików napisałem więc zapytanie:
  1. SELECT `files`.`name`, `files`.`patch`, `files`.`count`, `users`.`name` FROM `files`, `users` WHERE `files`.`user_id` = `users`.`id` AND `files`.`visible` = 1 AND `files`.`user_id` = `users`.`id` ORDER BY `files`.`id` DESC LIMIT 5


A tutaj 5 najczęściej pobieranych

  1. SELECT `files`.`name`, `files`.`patch`, `files`.`count`, `users`.`name` FROM `files`, `users` WHERE `files`.`user_id` = `users`.`id` AND `files`.`visible` = 1 AND `files`.`user_id` = `users`.`id` ORDER BY `files`.`count` DESC LIMIT 5


Lecz wydaje mi się, że z czasem może okazać się to mało wydajne...
Jeżeli to coś zmieni to `files`.`user_id` jest powiązany z `users`.`id` a `users`.`group_`id` jest powiązany jeszcze z inną tabelą.
vokiel
Ja bym to tak:
  1. SELECT
  2. `files`.`name`,
  3. `files`.`patch`,
  4. `files`.`count`,
  5. `users`.`name`
  6. FROM `files`
  7. JOIN `users` ON `files`.`user_id` = `users`.`id`
  8. WHERE
  9. `files`.`visible` = 1
  10. ORDER BY `files`.`id` DESC
  11. LIMIT 5


  1. SELECT
  2. `files`.`name`,
  3. `files`.`patch`,
  4. `files`.`count`,
  5. `users`.`name`
  6. FROM `files`
  7. JOIN `users` ON `files`.`user_id` = `users`.`id`
  8. WHERE `files`.`visible` = 1
  9. ORDER BY `files`.`count` DESC
  10. LIMIT 5
Fifi209
Też myślałem o takim rozwiązaniu, jednak jeżeli chodzi o szybkość to z joinem jest minimalnie wolniejsze. (nie wiem jak przy większej liczbie rekordów)
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.