ludzie ale co Wy tu ze herezje piszecie - choćbyście się (brzydko mówiąc) zesrali to bez indeksów nie przyśpieszycie. Nawet jakby tam było pole Char(1) to i tak za każdym razem baza MUSI przejechać całą tabelę!!!!
Nie mam MySQLa pod ręką ale na postgresie (który podobno jestwolniejszy od MySQLa) wygląda to tak:
Tabela
CREATE TABLE "public"."tab1" (
"id" SERIAL,
"tekst" VATCHAR(20),
"kwota" REAL,
CONSTRAINT "pk_id" PRIMARY KEY("id")
) WITH OIDS;
SELECT COUNT(*) FROM tab1
Count=1000000
1 rows fetched (5,11 sec)
Zapytanie z filtrowaniem po polu z indeksem
SELECT Count(*) FROM tab1 WHERE id < 56367 and id > 54310
Count=2056
1 rows fetched (0,02 sec)
zapytanie po polu bez indeksu
SELECT Count(*) FROM tab1 WHERE kwota > 310 and kwota < 320
Count=19848
1 rows fetched (1,03 sec)
i po dodaniu indeksu na t pole
Count=19848
1 rows fetched (0,28 sec)
a teraz na polu tekstowym
bez indeksu
SELECT Count(*) FROM tab1 WHERE tekst > '310' and tekst < '320'
Count=11022
1 rows fetched (15,33 sec)
z indeksem
Count=11022
1 rows fetched (0,41 sec)
każde zapytanie wykonywałem kilka razy, a czasy to są czasy średnie
dane wyglądają mniej więcej tak
id tekst kwota
3000031 99749130802112200000 470,37
3000032 56609964210824100000 198,79
3000033 67387188350496400000 69,68
3000034 55277758629656300000 383,52
3000035 44398726357332800000 340,89
3000036 81734853741589400000 226,65
3000037 71300751609402100000 332,52
3000038 58786406954185300000 348,98
3000039 1260413462883050000 250,69
3000040 7402625404020130000 288,16
Kumacie już po co są indeksy?