Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: optymalizacja select
Forum PHP.pl > Forum > Bazy danych > MySQL
wrebus
Prosiłbym o pomoc w optymalizacji zapytania wyszukującego:
  1. SELECT zdjecia.id, zdjecia.nazwa, zdjecia.id_plyta
  2. FROM zdjecia WHERE zdjecia.id IN (SELECT klucze_zdjecia.id_zdjecie
  3. FROM klucze_zdjecia WHERE klucze_zdjecia.id_klucz IN (SELECT id
  4. FROM klucze WHERE klucze.nazwa LIKE '%krowa%'))

wykonanie tego zapytania trwa 26 sek.exclamation.gif!!
mam w bazie 1300 zdjec, 160 kluczy i 2000 powiazan kluczy i zdjec.
moze cos poradzicie jak to lepiej napisac?
ActivePlayer
  1. SELECT zdjecia.id, zdjecia.nazwa, zdjecia.id_plyta
  2. FROM zdjecia, klucze_zdjecia, klucze
  3. WHERE zdjecia.id = klucze_zdjecia.id_zdjecie AND klucze_zdjecia.id_klucz = klucze.id AND klucze.nazwa LIKE '%krowa%'
SongoQ
Do tego zapytania co podal @ActivePlayer dodaj indeksy na pola zlaczeniowe i ktore uzywasz w WHERE.

Jesli zapytanie dalej bedzie tak dlugo dzialalo to mozesz wrocic do swojej wersji ale w ten sposob ze od pozdzapytan zwracasz zawsze jak najmniejsza liczbe rekordow. I najwazniejsze to zrob explain plan i zobaczysz co masz nie tak.
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.