Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dlugi czas wykonania zapytania - jak skrocic?
Forum PHP.pl > Forum > Bazy danych > MySQL
esos
witam

mam dwie tabele:

  1. CREATE TABLE `proces` (
  2. `proces_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `proces_pobor` varchar(20) NOT NULL DEFAULT '',
  4. `proces_start` date NOT NULL DEFAULT '0000-00-00',
  5. `proces_start_syst` date NOT NULL DEFAULT '0000-00-00',
  6. `proces_war_data` date NOT NULL DEFAULT '0000-00-00',
  7. `proces_war_data_syst` date NOT NULL DEFAULT '0000-00-00',
  8. `proces_otworzyl` varchar(50) NOT NULL DEFAULT '',
  9. `proces_zamknal` varchar(50) NOT NULL DEFAULT '',
  10. `proces_stan` char(2) NOT NULL DEFAULT '',
  11. `proces_z_obrotu` char(3) NOT NULL DEFAULT '',
  12. `proces_kom_rejestrujaca` varchar(5) NOT NULL DEFAULT '',
  13. `proces_dotyczy` varchar(150) NOT NULL DEFAULT '',
  14. PRIMARY KEY (`proces_id`)
  15. ) ENGINE=MyISAM AUTO_INCREMENT=10097 DEFAULT CHARSET=latin2 AUTO_INCREMENT=10097 ;



oraz:

  1. CREATE TABLE `wniosek` (
  2. `wniosek_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `wniosek_proces` varchar(11) NOT NULL DEFAULT '',
  4. `wniosek_nr` varchar(11) NOT NULL DEFAULT '',
  5. `wniosek_nr_reczny` varchar(250) NOT NULL DEFAULT '',
  6. `wniosek_nr_reczny_obr` text NOT NULL,
  7. `wniosek_klient` text NOT NULL,
  8. `wniosek_lokalizacja` text NOT NULL,
  9. `wniosek_lokalizacja_miasto` text NOT NULL,
  10. `wniosek_koresp` text NOT NULL,
  11. `wniosek_koresp_miasto` text NOT NULL,
  12. `wniosek_typ_wniosku` varchar(11) NOT NULL DEFAULT '',
  13. `wniosek_rodzaj_wniosku` varchar(11) NOT NULL DEFAULT '',
  14. `wniosek_dotyczy_wniosku` varchar(11) NOT NULL DEFAULT '',
  15. `wniosek_dzial_rejestracji` varchar(50) NOT NULL DEFAULT '',
  16. `wniosek_data` date NOT NULL DEFAULT '0000-00-00',
  17. `wniosek_data_syst` date NOT NULL DEFAULT '0000-00-00',
  18. `wniosek_zmienil` varchar(11) NOT NULL DEFAULT '',
  19. `wniosek_data_zmienil` varchar(11) NOT NULL DEFAULT '',
  20. `wniosek_aktywny` char(2) NOT NULL DEFAULT '',
  21. `wniosek_notatka` text NOT NULL,
  22. `wniosek_cele_grzewcze` varchar(5) NOT NULL DEFAULT '',
  23. PRIMARY KEY (`wniosek_id`)
  24. ) ENGINE=MyISAM AUTO_INCREMENT=10097 DEFAULT CHARSET=latin2 AUTO_INCREMENT=10097 ;


wyciagam dane dotyczace np 10 procesow z tabeli proces, jednoczesnie odwolujac sie do wnioskow by sprawdzic stan procesu i miejsce rejestracji wniosku. robie to w ten sposob:

  1. $pytanie="SELECT
  2. proces_id as id,
  3. proces_start as pstart,
  4. proces_kom_rejestrujaca as komorka,
  5. proces_start_syst as pstartsyst,
  6. proces_war_data_syst as pstopsystem,
  7. proces_pobor as pobor,
  8. proces_war_data as pstop,
  9. w.wniosek_klient as klient,
  10. w.wniosek_lokalizacja as lokalizacja,
  11. w.wniosek_lokalizacja_miasto as lokalizacja_miasto,
  12. w.wniosek_nr as wniosek, w.wniosek_nr_reczny as wniosek_reczny,
  13. proces_stan as stan
  14.  
  15. FROM proces p
  16.  
  17. left join wniosek w on w.wniosek_proces = p.proces_id where
  18. p.proces_kom_rejestrujaca = '$UserDzial' and
  19. proces_stan=1 order by id desc limit ".$strona*$na_stronie.", $na_stronie";


okrutnie dlugo musze czekac na odpowiedz, okolo 3-4 sekund baza potrzebuje na wykonanie tego zapytania. jak przyspieszyc to zapytanie?
obie tabele maja okolo 10k rekordow
nospor
Poczytaj o INDEXach. Ewidentnie ich ci tutaj brakuje
esos
Cytat(nospor @ 2.07.2010, 09:17:15 ) *
Poczytaj o INDEXach. Ewidentnie ich ci tutaj brakuje


faktycznie.
dodalem wiec indexy do pol, wg ktorych wystepuje wyszukiwanie, nie poprawilo to jednak szybkosci odpowiedzi bazy.

zaczalem sledzic tabele i okazalo sie, ze id procesu przechowywane w tabeli wniosek, siedzialo w polu varchar. przestawilem je na integer i momentalnie calosc wielokrotnie przyspieszyla...
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.