![]() |
![]() ![]() |
![]() |
![]()
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
proszę o pomoc ![]() ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Pozakładaj indeksy na kolumny relacyjne. Mi pomoglo przy kilku joinach
![]() Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 133 Pomógł: 0 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mi dobrze działa i niczym się nie różni od innych stron z ogłoszeniami:)
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 25.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
każde kliknięcie na stronie to jest pytanie do bazy, klikam na szczegóły ogłoszenie to tez pytanie i przewalanie wszystkiego, w szczegółach mam poprzednie i następnie to też pytanie do bazy i przewala wszystko
może by tak przy pierwszym pytaniu wszystko wrzucić do tablice i następnie sortować itd. Czy to dobry pomysł ? Jak to robią profesjonaliści ? Proszę o pomoc |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jeśli pokazałbyś schemat tych tabel co używasz do joina to byłoby nam łatwiej (prawdopodobnie będzie trzeba zrobić to co powiedział ~Cysiaczek)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 25.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
tak to wygląda
Ten post edytował mariusz g 16.01.2008, 12:49:04 |
|
|
![]()
Post
#7
|
|
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 ![]() - 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 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 25.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
witam
ogromne dzięki za odpowiedz do tematu: teraz baza działa o 150% szybciej ale jak wchodzę na inne serwisy w necie to nie ma porównania - u nich to po prostu rakieta pisałeś: - 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_* podpowiesz mi jak mam sie do tego zabrać (wszystkiego uczę sie metodą prób i błędów i wertuje neta w poszukiwaniu informacji) to co dopisałeś do bazy to dla mnie czarna magia ale poklikam w necie i może nauczę się jak samemu to optymalizować dzięki |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Polecam Ci przeczytanie artykułu Jak działa MySQL na EIOBA. Polcam Ci też ostatnie wydanie phpSolutions, znajdziesz tam artykuł MySQL - Techniki przyśpieszania zapytań. Gazetka kosztuje 30zł, ale to wydanie wyjątkowo jest warte swojej ceny.
Z ciekawych artykułów poczytaj sobie tu i tu i na koniec artykulik w wiki Ten post edytował Aztech 18.01.2008, 09:05:41 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 32 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Możesz też zerknąć na artykuł który opisuje jak zoptymalizować bazę danych.
-------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 25.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
mam jeszcze jedno pytanie
Jakiej szybkości mam oczekiwać ? Aby poćwiczyć zrobiłem prostą bazę z 4 kolumnami id, marka, model, typ,cena, rok Wprowadziłem do niej 50 000 różnych danych. Przy pomocy Query Browser wyświetliłem całą zawartość i otrzymałem czas 1,6 s i nie wiem czy to szybko, ale chyba nie bo przecież są bazy po kilka milionów rekordów a przy takim wyniku to strasznie wolno. Jakiej szybkości mam oczekiwać ? Ile średnio wam zajmują zapytania z taką ilością danych Rozumiem że to kwestia struktury bazy, czy są indexy, jakie dane, ile kolumn itd... Po prosty nie wiem do jakieś wydajności dążyć. A przydała by się np 1 000 000 rekordów i wynik w 2s. - tabela - id, marka, model, typ,cena, rok itd z 20 pozycji. pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 08:21 |