![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 4 Dołączył: 13.01.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
witam
zauważyłem jakiś czas temu u siebie dużą wielkość Handler_read_rnd_next, po około godzinie pracy serwera: 2 530 k i teraz, włączyłem logowanie do pliku zapytań nie wykorzystujących poprawnie indexów, z bardziej rażących przykładów: tabela ranking:
zapytanie:
całkowita liczba rekordów 8472 - skanuje je wszystkie by podać mi wynik i teraz pytanie brzmi co robię źle? byłbym wdzięczny za jakieś wskazówki pozdrawiam -------------------- gragieldowa.pl
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nic. Nie ma innej możliwości posortowania wszystkich wierszy w tabeli jak tylko przez posortowanie wszystkich wierszy w tabeli.
Poza tym zauważ, że zapytanie wykorzystuje indeks `miejsce` |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A co długo się wykonuje? Nie zapytanie nie wykorzystuje do końca indeksu.
To wykorzysta index pod warunkiem, że będzie na tym polu założony
Ten post edytował wookieb 20.05.2010, 15:31:22 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 4 Dołączył: 13.01.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
nie, nie wykonuje się długo, ale za to często, i wylądowało w logu powolnych zapytań i tych które nieprawidłowo używają kluczy (robią full table scan)
łącznie serwer zaczyna przymulać, i ta wartość Handler_read_rnd_next rośnie szybko (gdzie powinna być naprawde niska) w każdym razie teraz inny przykład:
wysłało 449, zbadało 950 - przy łącznej ilości rekordów - 501 w bazie i jeszcze explain:
-------------------- gragieldowa.pl
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
A co długo się wykonuje? Nie zapytanie nie wykorzystuje do końca indeksu.
To wykorzysta index pod warunkiem, że będzie na tym polu założony
A dokąd go wykorzystuje jak nie do końca? select_type - SIMPLE (Simple SELECT) type - index (This join type is the same as ALL, except that only the index tree is scanned. This usually is faster than ALL because the index file usually is smaller than the data file. ) key - miejsce key_len - 2 Kod select id_not,krotka,kurs,ostzamkniecie,volumen from notowania where branza>0 order by krotka; Spróbuj założyć indeks na kolumny (branza,krotka) Ten post edytował Mchl 20.05.2010, 16:33:48 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 4 Dołączył: 13.01.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
wposcie powyżej wypisałem indeksy z tabeli
id_not, krotka, branza, nazwa_akcji, zmiana - mają nałożone indeksy tabela ma ponad 80 kolumn więc strukture sobie podaruje -------------------- gragieldowa.pl
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Ale nie ma tam indeksu obejmującego obie te kolumny.
http://dev.mysql.com/doc/refman/5.0/en/mul...mn-indexes.html |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 4 Dołączył: 13.01.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
człowiek uczy się czegoś co chwilę, nawet nie wiedziałem że tak można:P
w każdym razie:
chyba dalej coś do końca nie jest tak jak powinno -------------------- gragieldowa.pl
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Zeby w tym zapytaniu był użyty tylko indeks, musisz mieć założone indeksy na wszystkie kolumny które pobierasz, filtrujesz i sortujesz.
Ale to raczej nie na tym polega... To że wykonują się często to jedna sprawa, na twoim miejscu pomyślałbym po prostu o cache po stronie php. Ten post edytował wookieb 20.05.2010, 17:20:48 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 13:14 |