![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Otóż tworze porównywarkę cen gdzie której chce połączyć 2 tabele i wyciągnąć z niej dane. Same zapytanie nie jest jakoś skomplikowane ale mimo tego wykonuje się strasznie długo przy dużej ilości rekordów w bazie. Próbowałem już wielu rzeczy, zmiana struktury bazy itp. i nic. Zawsze przy wielu rekordach w bazie zapytanie strasznie długo się wykonuje. Dodam że także zastosowałem indexy. Mam 2 tabele "product" oraz "product_offer" (tabele InnoDB) tabela "product" id | name | date_added | main Indexy na: id, name, main pole main informuje nas czy produkt jest produktem czy ofertą, gdy dany rekord w polu main ma 0 to znaczy że jest przypisany do innego produktu z tej samej tabeli. Przypisania zawarłem w tabeli "product_offer" id_product | id_offer | price Indexy na: id_product, id_offer oraz UNIQUE na id_product i id_offer w jednym Chce wyciąganć wszystkie produktu z nazwa, liczbą ofert do nich przypisaną oraz minimalną cenę. Oto zapytanie które to wykonuje jednak czas wykonania wynosi ponad 2 s :/
Co wy o tym myslicie ? Jak można to przyśpieszyć ? Dodam także że inne zapytania na innych tabelach ze złączeniami LEFT JOIN także wykonuje się długo przy takiej liczbie rekordów w bazie ![]() Ten post edytował Sajrox 22.01.2009, 19:10:33 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 174 Pomógł: 42 Dołączył: 22.07.2007 Skąd: /dev/random Ostrzeżenie: (0%) ![]() ![]() |
Cytat pole main informuje nas czy produkt jest produktem czy ofertą, gdy dany rekord w polu main ma 0 to znaczy że jest przypisany do innego produktu z tej samej tabeli. To jedna z przyczyn - indeksy na polach które mają za zadanie przechowywać informacje typu 0 lub 1 są bardzo słabe. Rozbij dane na dwie tabele lub zainteresuj się partycjonaowaniem. Kolejnym słabym punktem jest użycie w jednym i tym samym zapytaniu COUNT i MIN. W twoim przypadku jeżeli założyć, że w bazie jest 1 mln rekordów z czego połowa w kolumnie main posiada wartość 1 to baza skanuje 500 000 tyś. rekordów, więć trudno oczekiwać lepszej wydajności. Użyj EXPLAIN po więcej szczegółów. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
A może jakiś przykład z tym partycjonowaniem ? Niestety nie miałem z tym jeszcze do czynienia, Czytam z linka którego podałeś ale jakoś nie bardzo udaje mi się coś z tym zrobić
![]() Którą tabele mam dokładnie rozbić na 2 części ? I w czym to może pomóc ? Mam jeszcze jeden problem z z bazą MyISam a InnoDB. Otóż posiadam pewne proste zapytanie. W tabeli typu InnoDB wycaga 0 wyników a gdy zamienię tą tabelę na MyIsam to prawidłowo wyciąga wyniki. Dziwne troche :/ Ten post edytował Sajrox 22.01.2009, 20:27:49 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 174 Pomógł: 42 Dołączył: 22.07.2007 Skąd: /dev/random Ostrzeżenie: (0%) ![]() ![]() |
Cytat A może jakiś przykład z tym partycjonowaniem ? Niestety nie miałem z tym jeszcze do czynienia, Czytam z linka którego podałeś ale jakoś nie bardzo udaje mi się coś z tym zrobić Szukanie nie boli ![]() Cytat Którą tabele mam dokładnie rozbić na 2 części ? I w czym to może pomóc ? Na to pytanie odpowiesz sobie sam kiedy przeczytasz atykuł. Cytat Mam jeszcze jeden problem z z bazą MyISam a InnoDB. Otóż posiadam pewne proste zapytanie. W tabeli typu InnoDB wycaga 0 wyników a gdy zamienię tą tabelę na MyIsam to prawidłowo wyciąga wyniki. Dziwne troche :/ Jasnowidzem niestety nie jestem, więc jeżeli nie podasz konkretnego przykładu, przykładowych danych i oczekiwanego wyniku to nic nie doradze. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ok dzieki poszukam i dam znać czy się udało
![]() A z tą widocznością wyników to restart Apacha wyeliminował ten problem ![]() edit: Kurcze kiepsko z moim angielskim :/ A może jakiś przykład od siebie jeśli to nie kłopot. Chce założyć partycję np. na pole "date_added". Może malutki przykłądzik ? Będe bardzo wdzieczny ![]() Ten post edytował Sajrox 22.01.2009, 20:50:58 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:36 |