Yataman
5.05.2009, 07:07:35
Jesteście w stanie mi wytłumaczyć dlaczego zapytanie grupujące na tebeli z polem varchar jest wykonywana 18x szybciej niż na tej samej tabeli, tylko że pole varchar zostało zamienione na tinytext.
Nie chodzi tu o rozmiar tabeli, bo oba te typy nic w rozmiarze nie zmieniają. O co chodzi?!
Tabela 4.000.000 wierszy, 300MB
devnul
5.05.2009, 10:34:23
pole varchar ma stałą długość pola typu text są polami o zmiennej długości (chodzi o długość ciągu przechowywanego przez bazę) stąd też łatwiej bazie skakać po rekordach o równych długościach (zawsze taki sam przeskok) niż po rekordach o różnej długości (najpierw wyciąga informacje o długości pola, odczytuje dane a następnie może przeskoczyć dalej)
nospor
5.05.2009, 10:46:25
Cytat
pole varchar ma stałą długość pola typu text są polami o zmiennej długości (chodzi o długość ciągu przechowywanego przez bazę)
chyba pomylilo ci sie z char
@Yataman to i owo tu napisali:
http://forums.mysql.com/read.php?24,105964,105964glowne wyjasnienie w drugim poscie
Yataman
5.05.2009, 12:07:46
Dzięki za odpowiedź. Ku przestrodze innych zamieszczam czasy wykonania poszczególnych zapytań:
SELECT SQL_NO_CACHE * FROM tabela_var GROUP BY kategoria
7.3661s | 7.1696s | 7.3784s | 7.3916s | ŚREDNIA: 7.3723s
SELECT SQL_NO_CACHE * FROM tabela_text GROUP BY kategoria
53.268s | 53.0011s | 53.3888s | 53.269s | ŚREDNIA: 53.2685s
Dane w tabelach są identyczne. Tabele różnią się tylko typem dwóch pól tekstowych. Jeśli choć jedno pole zmieniam na TEXT to czas wykonania zapytania dramatycznie wzrasta.
maly_swd
5.05.2009, 14:28:19
A czy na te pola sa pozakladane odpowiednie INDEXY?
Yataman
5.05.2009, 15:28:04
Na pole kategoria, po którym dokonywane jest grupowanie jest założony indeks...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.