Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: opytmalizacja zapytania w bardzo dużej bazie
Forum PHP.pl > Forum > Bazy danych > MySQL
yakuz
Witam, mam problem z zapytaniem do bazy które wygląda tak:

  1. <?php
  2. $sql = mysql_query("SELECT id,tag,name,namepl,url,time,datepub,thumb,view FROM baza WHERE status='2' AND datepub<'".time()."' ORDER BY datepub DESC LIMIT $start,".NA_STRONIE);
  3. ?>


struktura bazy

  1. CREATE TABLE `baza` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `tag` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  4. `name` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  5. `namepl` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  6. `url` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  7. `time` varchar(8) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  8. `date` int(11) NOT NULL DEFAULT '0',
  9. `datepub` int(11) NOT NULL DEFAULT '0',
  10. `status` int(2) NOT NULL DEFAULT '0',
  11. `host` int(2) NOT NULL DEFAULT '0',
  12. `video_id_host` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  13. `info` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  14. `flv` text character SET utf8 collate utf8_unicode_ci NOT NULL,
  15. `embed` text character SET utf8 collate utf8_unicode_ci NOT NULL,
  16. `thumb` varchar(255) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '',
  17. `view` int(11) NOT NULL DEFAULT '0',
  18. `comment` int(11) NOT NULL DEFAULT '0',
  19. PRIMARY KEY (`id`),
  20. UNIQUE KEY `thumb` (`thumb`),
  21. UNIQUE KEY `url` (`url`),
  22. KEY `datepub` (`datepub`),
  23. KEY `status` (`status`),
  24. KEY `url_2` (`url`),
  25. KEY `id` (`id`),
  26. KEY `tag` (`tag`),
  27. KEY `view` (`view`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=latin2


w tabeli jest ponad 177 tys wpisów i przez to ładowanie strony twa ponad 10 sekund po zmniejszeniu tabeli do 50 tys wpisów strona chodzi ponownie szybko co zrobić aby zoptymalizować zapytanie lub bazę aby dobrze działała strona przy 177 tys wpisach?
nospor
strasznie dlugo.
indexy wydają sie byc ok.
sprobuj zamiast: status='2'
dac: status=2

przeciez status to liczba.

dodatkowo zmien typ pola z : int(2) na tinyint. zakladam ze status to mala liczba i mieszanie do tego inta to marnowanie bajtow. danie w nawiasie (2) tu nic nie da, po to dotyczy tylko zerofill a nie zakresu danych

rowniez z datepub usun ciapki bo widze tez inta tam trzymasz a nie date
maly_swd
a co pokazuje EXPLAIN?
laczyles moze indexy? np datepub, status?
status='2' to chyba powinno byc: status=2

pokaz explain z tego zapytania

*nospor - jak zawsze szybszy:)
yakuz
Cytat(nospor @ 22.06.2009, 14:37:30 ) *
rowniez z datepub usun ciapki bo widze tez inta tam trzymasz a nie date


nie znam się na bazach znasz może polecenie którym przekształce date z timestamp na date w formacie data w mysql?
erix
A dokumentację przeglądałeś?
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-2024 Invision Power Services, Inc.