Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Kryszic
Witam

mam następujący problem:

  1. # Query_time: 1.504482 Lock_time: 0.000034 Rows_sent: 5
  2. Rows_examined: 263845 SET timestamp=1370253373;
  3.  
  4. SELECT a.id, a.tytul, p.post_text FROM
  5. artykuly a,
  6. minibbtable_posts p
  7. WHERE a.topicId=p.topic_id ORDER BY p.post_id
  8. DESC LIMIT 5;
  9.  


Jak można zoptymalizowac takei zapytanie? z Góry dzięki
nospor
dodać indeksy na pola...
Kryszic
a możesz pokazać mi na przykąłdzie lub powiedzieć o co chodzi dzieki
Sephirus
Zrób dla obu tabel:

  1. SHOW CREATE TABLE [NAZWA_TABELI];


i pokaż wynik
Kryszic
  1. CREATE TABLE `minibbtable_posts` (
  2. `post_id` int(10) NOT NULL AUTO_INCREMENT,
  3. `forum_id` int(10) NOT NULL DEFAULT '1',
  4. `topic_id` int(10) NOT NULL DEFAULT '1',
  5. `poster_id` int(10) NOT NULL DEFAULT '0',
  6. `poster_name` varchar(255) NOT NULL DEFAULT 'Anonymous',
  7. `post_text` text NOT NULL,
  8. `post_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  9. `poster_ip` varchar(15) NOT NULL DEFAULT '',
  10. `post_status` tinyint(1) NOT NULL DEFAULT '0',
  11. `moderacja` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  12. `widoczny` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
  13. PRIMARY KEY (`post_id`),
  14. KEY `forum_id` (`forum_id`),
  15. KEY `topic_id` (`topic_id`),
  16. KEY `poster_id` (`poster_id`),
  17. KEY `poster_ip` (`poster_ip`)
  18. ) ENGINE=MyISAM AUTO_INCREMENT=134302 DEFAULT CHARSET=latin2


  1. CREATE TABLE `artykuly` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `tytul` varchar(200) DEFAULT NULL,
  4. `skrot` text,
  5. `tresc` text,
  6. `dataDodania` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  7. `dataModyfikacji` datetime NOT NULL,
  8. `publikacjaOd` datetime DEFAULT NULL,
  9. `godzina_od` time NOT NULL,
  10. `publikacjaDo` date DEFAULT NULL,
  11. `fotoId` int(10) DEFAULT NULL,
  12. `autor` varchar(200) DEFAULT NULL,
  13. `zrodlo` varchar(100) DEFAULT NULL,
  14. `ukryty` tinyint(1) UNSIGNED NOT NULL COMMENT '1 - ukryty',
  15. `status` tinyint(1) DEFAULT '1',
  16. `archiwum` tinyint(1) DEFAULT '0' COMMENT '1 - w archiwum',
  17. `aktualnosci` enum('brak','kopiawaktualnosciach') NOT NULL DEFAULT 'brak',
  18. `kalendarz` enum('brak','kopiawkalendarzu') NOT NULL DEFAULT 'brak',
  19. `topicId` int(10) UNSIGNED DEFAULT NULL,
  20. `wyswietlOpinie` tinyint(1) NOT NULL DEFAULT '1',
  21. `blokujOpinie` tinyint(1) NOT NULL DEFAULT '0',
  22. `icon` varchar(255) DEFAULT NULL,
  23. `rotator` tinyint(1) NOT NULL,
  24. `impreza` tinyint(1) NOT NULL,
  25. `ile` int(6) NOT NULL,
  26. `idgal` int(6) NOT NULL,
  27. `id_kat` int(6) NOT NULL,
  28. `kat_news` int(6) NOT NULL,
  29. `film` longtext NOT NULL,
  30. `mini` varchar(255) NOT NULL,
  31. `rodzaj` int(6) NOT NULL,
  32. `news` int(6) NOT NULL,
  33. PRIMARY KEY (`id`)
  34. ) ENGINE=MyISAM AUTO_INCREMENT=33222 DEFAULT CHARSET=utf8
markonix
Unormuj te nazwy kolumn.. Raz polskie, raz angielskie; raz podkreślnik, raz camelCase... Fe.
bpskiba
1 uruchomić OPTIMIZE TABLE....
2 zmienić silnik na innoDB w obu tabelach
3 ustawić identyczny typ danych na polach a.topicId oraz p.topic_id (unsigned to istotna różnica)
4 założyć indexy na tych polach (brak w artykułach)

po wszystkim wykonać EXPLAIN ..... podać wynik i sprawdzić czy jest różnica
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.