Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zaawansowanego zapytania, zabija serwer - strona ładuje się 10 sekund
Natalka
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

Ostrzeżenie: (0%)
-----


Mam pewien problem z zapytaniem, które strasznie zamula mi stronę.


Na stronie chcę pobrać

Wszystkie obrazki z bazy danych które zostały polubione powyżej 3 razy.


Moje zapytanie wygląda tak:
Kod
SELECT * FROM obrazek WHERE id in (SELECT id_obrazek FROM loveit HAVING count(loveit.id) > 3 ) ORDER BY id desc LIMIT $ilosc



Tabela obrazek - zawiera listę wszystkich obrazków

pola w bazie
id - nr id obrazka


Tabela loveit - zawiera listę wszystkich osób które lubią obrazek

pola w bazie
id_obrazek - nr id obrazka


Wiem że problem jest dokładnie tutaj
Kod
WHERE id in (SELECT id_obrazek FROM loveit HAVING count(loveit.id) > 3 )


Bo gdy usunę tę cześć działa bez problemu.

Czy jest ktoś w stanie mi pomóc w jaki sposób mogę to zoptymalizować?

Ten post edytował Natalka 15.05.2011, 14:08:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Natalka
post
Post #2





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 28.10.2009
Skąd: że znowu...

Ostrzeżenie: (0%)
-----


Już testuję Twoje zapytanie


/** sprawdzone **/

Działa dużo szbciej, już nie zabija tak strony

Czy można jeszcze coś ulepszyć w mojej bazie danych ?


A czy mógłby ktoś jeszcze podpowiedzieć co takiego źle robiłam? Czemu aż tak bardzo moje zapytanie zamulało stronę?



A Baza wygląda tak:


Kod
CREATE TABLE IF NOT EXISTS `obrazek` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `tytul` text NOT NULL,
  `opis` text NOT NULL,
  `skad` text NOT NULL,
  `obrazek` text NOT NULL,
  `obrazekmini` text NOT NULL,
  `user_id` int(9) NOT NULL,
  `raport` int(1) DEFAULT '0',
  `dodanydata` varchar(20) NOT NULL,
  `plikURL` text NOT NULL,
  `typ` enum('obrazek','video') NOT NULL DEFAULT 'obrazek',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=2604;



Kod
CREATE TABLE IF NOT EXISTS `loveit` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `id_obrazek` int(9) NOT NULL,
  `id_user` int(9) NOT NULL,
  `datadodania` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=4450;


Ten post edytował Natalka 15.05.2011, 14:23:08
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 09:22