Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szybkość Text i Varchar
Forum PHP.pl > Forum > Bazy danych > MySQL
Yataman
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
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
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,105964
glowne wyjasnienie w drugim poscie
Yataman
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
A czy na te pola sa pozakladane odpowiednie INDEXY?
Yataman
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.