Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czytanie dużej tabeli od tyłu
Forum PHP.pl > Forum > Bazy danych > MySQL
matisq
Cześć,

Mam tabelę koło miliona rekordów. Każdy rekord zawiera pól. Chcę znaleźć NAJNOWSZY (czyli znajdujący się na końcu tablicy) wpis dotyczący czegoś tam i spełniający potrójny warunek
  1. SELECT * FROM bla WHERE bla1=1 AND bla2=2 AND bla3=3
I tu pojawia się problem. Próbowałem robić zapytanie
  1. SELECT * FROM bla WHERE bla1=1 AND bla2=2 AND bla3=3 ORDER BY id DESC LIMIT 1
No i takie zapytanie trwa ponad 20 sekund. Zatem spróbowałem innego podejścia. Sprawdzam ile rekordów ma tablica i parsuję je sobie z pomocą php żeby dostać to co chcę.
  1. <?php
  2. for($j=$num_value;$j>1;$j--){
  3.   pytanie sql; -> SELECT * FROM bla WHERE bla1=1 AND bla2=2 AND bla3=3 AND id=$j
  4. }
  5. ?>

Problem jest taki że część danych jest dość "daleko" od końca wię i to trwa koło 20 sekund dodatkowo obciążając system na prawie 100%!

Czy jest jakiś sposób na to?
Czy można parsować tabelę od tyłu używając samego sql?
phpion
Cytat(matisq @ 3.02.2009, 16:33:43 ) *
Próbowałem robić zapytanie
  1. SELECT * FROM bla WHERE bla1=1 AND bla2=2 AND bla3=3 ORDER BY id DESC LIMIT 1
No i takie zapytanie trwa ponad 20 sekund.

Pole id jest oczywiście kluczem głównym, prawda? Na kolumny bla1, bla2, bla3 założone są indeksy?
matisq
dokładnie tak
nospor
  1. EXPLAIN SELECT * FROM bla WHERE bla1=1 AND bla2=2 AND bla3=3 ORDER BY id DESC LIMIT 1

Co ci zwraca?
matisq
  1. mysql> EXPLAIN SELECT * FROM service_data WHERE host_id="30" AND service_id="3" ORDER BY id LIMIT 1 ;
  2. +----+-------------+--------------+------+------------------------------+---------+---------+-------------+------+-----------------------------+
  3. | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra |
  4. +----+-------------+--------------+------+------------------------------+---------+---------+-------------+------+-----------------------------+
  5. | 1 | SIMPLE | service_data | ref | host_id,host_id_2,service_id | host_id | 8 | const,const | 762 | USING WHERE; USING filesort |
  6. +----+-------------+--------------+------+------------------------------+---------+---------+-------------+------+-----------------------------+
  7. 1 row IN SET (0.07 sec)
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.