Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] Wyszukiwanie w bazie strasznie wolne.
mariusz g
post
Post #1





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 25.03.2006

Ostrzeżenie: (0%)
-----


witam

serwer do testów mam w domu 1.4 Pentium, ram 384MB

Dodałem do bazy 80 000 ogłoszeń i tragedia (przy 300 ogłoszeniach śmiga aż miło)
Przy jednym użytkowniku muli a co będzie przy 1000. Nawet jak będzie serwer rakieta to i tak zamuli.
Teraz procek przy wyszukiwaniu jest na 100%

Sami zobaczcie

Wystarczy kliknąć na linka następnie szukaj. Nic z formularza nie wybierajcie bo nie wszystko jeszcze działa.

http://85.221.237.255/~Ogloszenia%20v.118/...dex.php?kolor=1
komp będzie dziś chodził do 18 00

tak wygląda zapytanie do bazy

  1. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM $tab_dane LEFT JOIN $tab_marka ON $tab_marka.id = $tab_dane.marka
  2. LEFT JOIN $tab_model ON $tab_model.id = $tab_dane.model
  3. LEFT JOIN $tab_typ ON $tab_typ.id = $tab_dane.typ
  4. WHERE $pytanie $order LIMIT $start, $na_stronie");






proszę o pomoc (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) ! co robić (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Aztech
post
Post #2





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Strasznie masz zrobioną tą bazę:
- po pierwsze jeśli masz tabelę dane, to trzymaj w niej id modelu a nie referencję do modelu, dlatego że jeśli trzymasz tam tekst to podczas JOINa masz robione porównywanie tekstów, które jest strasznie wolne
- w tabelkach osobowe_* używasz do id typów INT, po co Ci takie duże? Jeśli nie masz tam dużo danych skorzystaj z dobordziejstwa typów TINYINT, SMALLINT, MEDIUMINT
- w tabelce dane masz np marka, która jest typu smallint(11), natomiast w tabeli osobowe_marka masz id jako int(11) => niekonsekwencja
- poznaznaczaj sobie w polach UNSIGNED (id raczej ujemne nie będzie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )
- poprawiłem trochę twoją bazę danych (poniżej kod) pozakładałem klucze obce, potworzyłem indeksy oraz zmieniłem typ na InnoDB
- proponowałbym Ci buforowanie odczytów, czyli wybierasz tak narapwdę tylko z bazy danych dane a następnie tylko i wyłącznie dla wyświetlanych aktualnie wierszy odczytujesz odpowiednie informacje z tabelek sobowe_*
- całej tabelki dane nie chciało mi się modyfikować

Rada:
ściągnij sobie ze strony MySQL (Administrator, Query Browser) i korzystaj z nich

Kod
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Struktura tabeli dla  `dane`
--

CREATE TABLE `dane` (
  `id_dane` int(11) NOT NULL auto_increment,
  `id_uzytkownika` int(11) NOT NULL,
  `firma_prywatnie` char(1) default NULL,
  `data_dodania` datetime default NULL,
  `data_aktywacji` datetime default NULL,
  `status` char(1) default NULL,
  `wyroznione` year(4) default NULL,
  `fotografie` char(1) default NULL,
  `kategoria` int(11) default NULL,
  `typ_oferty` char(1) default NULL,
  `id_marka` int(10) unsigned NOT NULL,
  `id_model` int(10) unsigned NOT NULL,
  `id_typ` int(10) unsigned NOT NULL,
  `rocznik` smallint(11) default NULL,
  `miesiac` varchar(3) default NULL,
  `przebieg` int(11) default NULL,
  `cena` int(11) default NULL,
  `region` char(2) default NULL,
  `typ_silnika` char(10) default NULL,
  `silnik` varchar(2) default NULL,
  `pojemnosc` char(5) default NULL,
  `moc` char(5) default NULL,
  `typ_nadwozia` char(2) default NULL,
  `drzwi` char(2) default NULL,
  `kolor` varchar(20) default NULL,
  `o_1` char(1) default NULL,
  `o_2` char(1) default NULL,
  `o_3` char(1) default NULL,
  `o_4` char(1) default NULL,
  `o_5` char(1) default NULL,
  `o_6` char(1) default NULL,
  `o_7` char(1) default NULL,
  `o_8` char(1) default NULL,
  `o_9` char(1) default NULL,
  `o_10` char(1) default NULL,
  `o_11` char(1) default NULL,
  `o_12` char(1) default NULL,
  `o_13` char(1) default NULL,
  `o_14` char(1) default NULL,
  `o_15` char(1) default NULL,
  `w_1` char(1) default NULL,
  `w_2` char(1) default NULL,
  `w_3` char(1) default NULL,
  `w_4` char(1) default NULL,
  `w_5` char(1) default NULL,
  `w_6` char(1) default NULL,
  `w_7` char(1) default NULL,
  `w_8` char(1) default NULL,
  `w_9` char(1) default NULL,
  `w_10` char(1) default NULL,
  `w_11` char(1) default NULL,
  `w_12` char(1) default NULL,
  `w_13` char(1) default NULL,
  `w_14` char(1) default NULL,
  `w_15` char(1) default NULL,
  `w_16` char(1) default NULL,
  `w_17` char(1) default NULL,
  `w_18` char(1) default NULL,
  `w_19` char(1) default NULL,
  `w_20` char(1) default NULL,
  `w_21` char(1) default NULL,
  `w_22` char(1) default NULL,
  `w_23` char(1) default NULL,
  `w_24` char(1) default NULL,
  `w_25` char(1) default NULL,
  `w_26` char(1) default NULL,
  `w_27` char(1) default NULL,
  `w_28` char(1) default NULL,
  `w_29` char(1) default NULL,
  `w_30` char(1) default NULL,
  `w_31` char(1) default NULL,
  `w_32` char(1) default NULL,
  `w_33` char(1) default NULL,
  `w_34` char(1) default NULL,
  `w_35` char(1) default NULL,
  `w_36` char(1) default NULL,
  `w_37` char(1) default NULL,
  `w_38` char(1) default NULL,
  `w_39` char(1) default NULL,
  `w_40` char(1) default NULL,
  `w_41` char(1) default NULL,
  `w_42` char(1) default NULL,
  `sciezka` varchar(50) default NULL,
  `foto_a` varchar(50) default NULL,
  `foto_b` varchar(50) default NULL,
  `foto_c` varchar(50) default NULL,
  `foto_d` varchar(50) default NULL,
  `foto_e` varchar(50) default NULL,
  `foto_f` varchar(50) default NULL,
  `foto_g` varchar(50) default NULL,
  `foto_h` varchar(50) default NULL,
  `foto_i` varchar(50) default NULL,
  PRIMARY KEY  (`id_dane`),
  KEY `FK_dane_model` (`id_model`),
  KEY `FK_dane_marka` (`id_marka`),
  KEY `FK_dane_3` USING BTREE (`id_typ`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `osobowe_marka`
--

CREATE TABLE `osobowe_marka` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `marka` varchar(10) NOT NULL,
  `ile` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `osobowe_model`
--

CREATE TABLE `osobowe_model` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `id_marka` int(10) unsigned NOT NULL,
  `model` varchar(10) NOT NULL,
  `ile` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `FK_osobowe_model_marka` (`id_marka`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `osobowe_typ`
--

CREATE TABLE `osobowe_typ` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `id_model` int(10) unsigned NOT NULL,
  `id_marka` int(10) unsigned NOT NULL,
  `typ` varchar(10) NOT NULL,
  `ile` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `FK_osobowe_typ_model` (`id_model`),
  KEY `FK_osobowe_typ_marka` (`id_marka`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1;


--
-- Ograniczenia dla tabeli `dane`
--
ALTER TABLE `dane`
  ADD CONSTRAINT `FK_dane_typ` FOREIGN KEY (`id_typ`) REFERENCES `osobowe_typ` (`id`),
  ADD CONSTRAINT `FK_dane_marka` FOREIGN KEY (`id_marka`) REFERENCES `osobowe_marka` (`id`),
  ADD CONSTRAINT `FK_dane_model` FOREIGN KEY (`id_model`) REFERENCES `osobowe_model` (`id`);

--
-- Ograniczenia dla tabeli `osobowe_model`
--
ALTER TABLE `osobowe_model`
  ADD CONSTRAINT `FK_osobowe_model_marka` FOREIGN KEY (`id_marka`) REFERENCES `osobowe_marka` (`id`);

--
-- Ograniczenia dla tabeli `osobowe_typ`
--
ALTER TABLE `osobowe_typ`
  ADD CONSTRAINT `FK_osobowe_typ_model` FOREIGN KEY (`id_model`) REFERENCES `osobowe_model` (`id`),
  ADD CONSTRAINT `FK_osobowe_typ_marka` FOREIGN KEY (`id_marka`) REFERENCES `osobowe_marka` (`id`);


Ten post edytował Aztech 16.01.2008, 15:35:56
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.09.2025 - 15:32