Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie wykonuje się koszmarnie wolno
artur81
post
Post #1





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


Witam!
Mam problem z zapytaniem, otóż póki było mało rekordów wszystko było ok, obecnie w jednym miejscu muszę pobrać dane z 5 innych tabel i przy 234 rekordach trwa to strasznie długo, na serwerze lokalnym: Wersja serwera MySQL: 4.0.15, Wersja php: 4.3.3, trwa to około 15-20 sekund do momentu wyświetlenia się danych w przeglądarce.
W jaki sposób można zoptymalizować to zapytanie, 2 - 3 sekundy to byłoby do zaakceptowania, ale nie 15!
Struktura bazy:
  1. Baza danych komputery uruchomiony na localhost
  2. # phpMyAdmin SQL Dump
  3. # version 2.5.3
  4. #
  5. # Host: localhost
  6. # Czas wygenerowania: 12 Maj 2006, 07:23
  7. # Wersja serwera: 4.0.15
  8. # Wersja php: 4.3.3
  9. #
  10. # Baza danych : `komputery`
  11. #
  12.  
  13. # --------------------------------------------------------
  14.  
  15. #
  16. # Struktura tabeli dla `czesci_zestawu`
  17. #
  18.  
  19. CREATE TABLE `czesci_zestawu` (
  20. `id_czesci` int(4) NOT NULL AUTO_INCREMENT,
  21. `id_kategorii` tinyint(2) DEFAULT NULL,
  22. `id_uzytkownika` int(3) DEFAULT NULL,
  23. `id_zestawu` int(4) DEFAULT NULL,
  24. `id_dostawcy` tinyint(2) DEFAULT NULL,
  25. `nazwa` char(50) DEFAULT NULL,
  26. `cena` float(5,2) DEFAULT NULL,
  27. `nr_f_vat` char(15) DEFAULT NULL,
  28. `nr_licencji` char(50) DEFAULT NULL,
  29. `data_wygasniecia` date DEFAULT NULL,
  30. `data_dostarczenia` date DEFAULT NULL,
  31. `id_statusu` tinyint(1) DEFAULT NULL,
  32. `id_rejestru_fk` char(8) DEFAULT NULL,
  33. `uwagi` char(255) DEFAULT NULL,
  34. PRIMARY KEY (`id_czesci`)
  35. ) TYPE=MyISAM AUTO_INCREMENT=235 ;
  36.  
  37. # --------------------------------------------------------
  38.  
  39. #
  40. # Struktura tabeli dla `dostawcy`
  41. #
  42.  
  43. CREATE TABLE `dostawcy` (
  44. `id_dostawcy` tinyint(2) NOT NULL AUTO_INCREMENT,
  45. `nazwa` varchar(40) DEFAULT NULL,
  46. `ulica` varchar(40) DEFAULT NULL,
  47. `miasto` varchar(25) DEFAULT NULL,
  48. `telefon` varchar(20) DEFAULT NULL,
  49. `fax` varchar(20) DEFAULT NULL,
  50. `email` varchar(30) DEFAULT NULL,
  51. PRIMARY KEY (`id_dostawcy`)
  52. ) TYPE=MyISAM AUTO_INCREMENT=2 ;
  53.  
  54. # --------------------------------------------------------
  55.  
  56. #
  57. # Struktura tabeli dla `historia`
  58. #
  59.  
  60. CREATE TABLE `historia` (
  61. `id_historia` int(11) NOT NULL AUTO_INCREMENT,
  62. `id_zestawu` int(11) DEFAULT NULL,
  63. `nazwa_czesci` char(50) NOT NULL DEFAULT '',
  64. `akcja` char(15) NOT NULL DEFAULT '',
  65. `data_zmiany` date NOT NULL DEFAULT '0000-00-00',
  66. `poprzedni_stan` char(50) NOT NULL DEFAULT '',
  67. `obecny_stan` char(50) NOT NULL DEFAULT '',
  68. PRIMARY KEY (`id_historia`)
  69. ) TYPE=MyISAM AUTO_INCREMENT=235 ;
  70.  
  71. # --------------------------------------------------------
  72.  
  73. #
  74. # Struktura tabeli dla `kategorie`
  75. #
  76.  
  77. CREATE TABLE `kategorie` (
  78. `id_kategorii` tinyint(2) NOT NULL AUTO_INCREMENT,
  79. `nazwa` char(40) NOT NULL DEFAULT '',
  80. PRIMARY KEY (`id_kategorii`)
  81. ) TYPE=MyISAM AUTO_INCREMENT=26 ;
  82.  
  83. # --------------------------------------------------------
  84.  
  85. #
  86. # Struktura tabeli dla `lic`
  87. #
  88.  
  89. CREATE TABLE `lic` (
  90. `id` tinyint(1) NOT NULL AUTO_INCREMENT,
  91. `f` char(255) NOT NULL DEFAULT '',
  92. PRIMARY KEY (`id`)
  93. ) TYPE=MyISAM AUTO_INCREMENT=2 ;
  94.  
  95. # --------------------------------------------------------
  96.  
  97. #
  98. # Struktura tabeli dla `statusy`
  99. #
  100.  
  101. CREATE TABLE `statusy` (
  102. `id_statusu` tinyint(1) NOT NULL AUTO_INCREMENT,
  103. `nazwa` char(30) DEFAULT NULL,
  104. PRIMARY KEY (`id_statusu`)
  105. ) TYPE=MyISAM AUTO_INCREMENT=6 ;
  106.  
  107. # --------------------------------------------------------
  108.  
  109. #
  110. # Struktura tabeli dla `uzytkownicy`
  111. #
  112.  
  113. CREATE TABLE `uzytkownicy` (
  114. `id_uzytkownika` int(3) NOT NULL AUTO_INCREMENT,
  115. `imie` char(30) DEFAULT NULL,
  116. `nazwisko` char(50) DEFAULT NULL,
  117. `stanowisko` char(50) DEFAULT NULL,
  118. `nr_pokoju` char(4) DEFAULT NULL,
  119. `telefon` char(20) DEFAULT NULL,
  120. `email` char(30) DEFAULT NULL,
  121. PRIMARY KEY (`id_uzytkownika`)
  122. ) TYPE=MyISAM AUTO_INCREMENT=16 ;
  123.  
  124. # --------------------------------------------------------
  125.  
  126. #
  127. # Struktura tabeli dla `zestawy`
  128. #
  129.  
  130. CREATE TABLE `zestawy` (
  131. `id_zestawu` int(3) NOT NULL AUTO_INCREMENT,
  132. `id_dostawcy` tinyint(2) DEFAULT NULL,
  133. `data_dostarczenia` date DEFAULT NULL,
  134. `cena` float(5,2) DEFAULT NULL,
  135. `nr_f_vat` char(15) DEFAULT NULL,
  136. `nr_licencji` char(50) DEFAULT NULL,
  137. `data_wygasniecia` date DEFAULT NULL,
  138. `id_statusu` tinyint(1) DEFAULT NULL,
  139. `id_rejestru_fk` char(8) DEFAULT NULL,
  140. `uwagi` char(255) DEFAULT NULL,
  141. `nazwa` char(50) DEFAULT NULL,
  142. `id_uzytkownika` int(3) DEFAULT NULL,
  143. PRIMARY KEY (`id_zestawu`)
  144. ) TYPE=MyISAM AUTO_INCREMENT=17 ;


Zapytanie:
  1. SELECT czesci_zestawu.id_czesci, kategorie.nazwa, uzytkownicy.nazwisko, uzytkownicy.imie,
  2. uzytkownicy.stanowisko, uzytkownicy.nr_pokoju, zestawy.nazwa, dostawcy.nazwa,
  3. czesci_zestawu.nazwa, czesci_zestawu.cena, czesci_zestawu.nr_f_vat, czesci_zestawu.nr_licencji,
  4. czesci_zestawu.data_wygasniecia, czesci_zestawu.data_dostarczenia, statusy.nazwa,
  5. czesci_zestawu.id_rejestru_fk, czesci_zestawu.uwagi
  6. FROM czesci_zestawu,
  7. kategorie, uzytkownicy, statusy, zestawy, dostawcy
  8. WHERE czesci_zestawu.id_kategorii = kategorie.id_kategorii AND czesci_zestawu.id_uzytkownika=uzytkownicy.id_uzytkownika AND czesci_zestawu.id_zestawu=zestawy.id_zestawu AND czesci_zestawu.id_dostawcy=dostawcy.id_dostawcy AND czesci_zestawu.id_statusu=statusy.id_statusu ORDER BY czesci_zestawu.`$co` $sort;


$co, $sort odpowiadają polu po którym sortuje i sposobie sortowania (asc, desc), przekazwyane GET

A dane wyświetlam w następujący sposób:
  1. <?php
  2.  
  3. //nagłówek tabeli
  4. while ($rekord = mysql_fetch_array ($wynik)) {
  5. $id_czesci= $rekord[0];
  6. $kategoria=$rekord[1];
  7. $nazwisko=$rekord[2];
  8. $imie=$rekord[3];
  9. $stanowisko=$rekord[4];
  10. $nr_pokoju=$rekord[5];
  11. $zestaw = $rekord[6];
  12. $dostawca=$rekord[7];
  13. $nazwa=$rekord[8];
  14. $cena=$rekord[9];
  15. $nr_f_vat=$rekord[10];
  16. $nr_licencji=$rekord[11];
  17. $data_wygasniecia=$rekord[12];
  18. $data_dostarczenia=$rekord[13];
  19. $status=$rekord[14];
  20. $id_rejestru_fk=$rekord[15];
  21. $uwagi=$rekord[16];
  22.  
  23. echo '<tr class="podswietl">
  24. <td><a href = "podzespoly_action.php?akcja=edytuj&id_czesci='.$id_czesci.'&staryzestaw='.$zestaw.'&starystatus='.$status.'"><img src="images/button_edit.png" alt="Edytuj podzespół lub oprogramowanie" title="Edytuj podzespół lub oprogramowanie"></a></td>
  25. <td><a href = "podzespoly_action.php?akcja=skasuj&id_czesci='.$id_czesci.'&staryzestaw='.$zestaw.'&starystatus='.$status.'&nazwa='.$nazwa.'"><img src="images/button_empty.png" alt="Skasuj podzespół lub oprogramowanie" title="Skasuj podzespół lub oprogramowanie"></a></td>
  26. <td align="center" class="komorka">'.$nazwa.'</td>
  27. <td align="center" class="komorka">'.$kategoria.'</td>
  28. <td align="center" class="komorka">'.$zestaw.'</td>
  29. <td align="center" class="komorka">'.$dostawca.'</td>
  30. <td align="center" class="komorka" title="'.$stanowisko.' w pokoju nr '.$nr_pokoju.'">'.$nazwisko.' '.$imie.'</td>
  31. <td align="center" class="komorka">'.$status.'</td>
  32. <td align="center" class="komorka">'.$cena.'</td>
  33. <td align="center" class="komorka">'.$nr_f_vat.'</td>
  34. <td align="center" class="komorka">'.$nr_licencji.'</td>
  35. <td align="center" class="komorka">'.$data_wygasniecia.'</td>
  36. <td align="center" class="komorka">'.$data_dostarczenia.'</td>
  37. <td align="center" class="komorka">'.$id_rejestru_fk.'</td>
  38. <td align="center" class="komorka">'.$uwagi.'</td>
  39. </tr>';
  40. // dalsza cześć skryptu  
  41. }
  42. ?>
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: 23.08.2025 - 06:45