![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Może mi doradzicie, mam takie zapytanie, czy da się jakoś te zapytanie inaczej zapisać, by przyspieszyć działanie, może jakaś inna forma zapisu. Macie pomysły, będe wdzięczny za wszelkie sugestie, rady
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 587 Pomógł: 131 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
1. przede wszystkim 'SELECT *' to zabójstwo przy takim zapytaniu - może dasz radę nieco okroić kolumny do tych które potrzebujesz (ogromna tabela tymczasowa się robi do tego - to może trwać)
2. Zapytanie pod względem złączeń wydaje się optymalne. Nie ma w nim ani ORDER BY ani GROUP BY, które wymusiły by dodatkowe sortowanie - co sprawia, że nie ma na to opóźnienia. Jedyne co zastanawia to czy wszystkie pola użyte w klauzuli ON i WHERE mają odpowiednie indeksy. 3. Kiedy wykonujesz to zapytanie? Jak często? Jakie jest obciążenie bazy? Jeśli działasz na MyISAM i to się wykonuje często to mogą być duże opóźnienia przez blokowanie tabel. Powinno to być na InnoDB. 4. Wydaje mi się, że niektóre z tabel są dodane (dołączne) na siłę. Przykładowo rozumiem że `Uszkodzenia`, `Stan` itp to bardziej słowniki. Możesz równie dobrze pobierać słowniki całe (jeśli nie są duże) oddzielnymi zapytaniami i je cacheować. Następnie przy wyświetlaniu rekordu po prostu je wyświetlać. Może się to okazać dużo wydajniejsze niż masa złączeń. 5. Jakiej wielkości są te tabele? Jaki jest rząd wielkości liczby rekordów? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
juz obiasniam te zapytanie służy do stworzenie XML, musze mieć te elementy bo te elementy musze załadować wszystkie do XML.
te zapytanie będzie wykonywane tylko wtedy kiedy będzie wykonywany plik exportu Jesli chodzi o wynik:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 587 Pomógł: 131 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Od razu widać ze brak indeksów na tabelach.
Zerknij na PROCEDURE ANALYSE.
Niech nie będzie dla ciebie wyrocznią np (ENUM (IMG:style_emoticons/default/smile.gif) ) ale pozwoli ci zoptymalizować trochę tabele. Ten post edytował rocktech.pl 17.01.2013, 16:36:02 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
kazda tabela ma index. , wiec nie bardzo rozumie co masz na mysli , mówiąc że tabele nie mają indexu.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o główną tabelę jak widać. Czy jej wszystkie pola, które używasz w JOINach mają indeks?
np.: Kod INNER JOIN rdostawcze AS m ON (a.odRodzaj = m.id ) Czy a.odRodzaj ma indeks? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
dzieki za wskazówki
tak wszyskie tabele mają indeksy tylko nie nazwane id a np markaId uszId o to pytasz? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
wynik:
CREATE TABLE `ciezarowe` ( `odId` int(11) NOT NU... |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to
Kod id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a ALL NULL NULL NULL NULL 3 Using where w kolumnach possible_keys i key masz NULL czyli żaden indeks nie został użyty dla tabeli "a", a konkretnie dla któreś z kolumn użytej w złączeniu odnoszę dziwne wrażenie że te wszystkie tabele(a przynajmniej większość) są w relacji 1:1, jeśli tak to lepiej je zapisać w jednej tabeli |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
w kolumnach possible_keys i key masz NULL czyli żaden indeks nie został użyty dla tabeli "a", a konkretnie dla któreś z kolumn użytej w złączeniu
1.) ale czy musi być index wypisany dla tabeli "a" jak to jest główna tabela i główny index tej tabeli, index tej tabeli głownej jest dla rekordu (czyli ogłoszenia ), wiec jakim celu index tabeli „a” ma być użyty dla jakiejs kolumny? nie rozumie twojego toku myślenia. 2.) Głowna tabela "a" - to ogłoszenia –Index tej tabeli to rekord tabela ta zawiera indeksy innych tabel np (kraj , region, stan, marka , itp) i jak te elementy miały by być w jednej tabeli wypisane? nie rozumie tego myślenia również |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
prawdopodobnie chodzi o a.odDate
brak indeksu powoduje że trzeba przeszukać wszystkie rekordy. Załóżmy że w tabeli masz 1000 rekordów i tylko 5 z nich spełnia warunek w WHERE Jeśli na kolumnie jest indeks zostanie przeszukane tylko 5 rekordów Jeśli nie ma indeksu zostanie przeszukane 1000 rekordów oczywiście nie popadaj w paranoję i nie nakładaj indeksów na wszystkie kolumny (IMG:style_emoticons/default/smile.gif) Najlepiej obserwować EXPLAIN i jeśli w kolumnie rows będą się pojawiały duże liczby to wtedy trzeba myśleć jak to dodatkowo ograniczyć |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 3 Dołączył: 19.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat 2.) Głowna tabela "a" - to ogłoszenia –Index tej tabeli to rekord tabela ta zawiera indeksy innych tabel np (kraj , region, stan, marka , itp) i jak te elementy miały by być w jednej tabeli wypisane? nie rozumie tego myślenia również Mylisz chyba indeks z identyfikatorem. Poczytaj trochę o indeksach w bazach danych, szybko załapiesz o czym piszą koledzy. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 16.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
sazian masz racje z tym --> a.odDate
ok dzieki nie zauważyłem tego. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 13:18 |