ugrás a tartalomhoz

MySql - Speciális index

Grimlab · 2007. Május. 22. (K), 14.09
Sziasztok, lehet úgy index-elni, hogy nem egy konkrét mezőt index-elek le, hanem egy kifejezést! Konkrétan van egy tábla, benne egy email címek oszlop, és nekem sokszor van szükségem az üres email című sorokra. Ha az email oszlopot index-elem le, akkor irreálisan sok felesleges adatot mentek el, de redundás oszlopot sem szeretnék.
Létezik ilyen index?
 
1

szerintem nem

virág · 2007. Május. 22. (K), 15.04
Szia, szerintem nincs ilyen, de nem értelek teljesen, így valószínű, hogy létezhet megoldás rá, csak nem értettelek jól. :)
2

pontosítás

Grimlab · 2007. Május. 24. (Cs), 12.55
Adott egy tábla, ezeregy oszloppal. Ebből cssupán kettőt emelnék ki, egyik az ID, amin van egy primary key, illetve Email, amin nincs semmilyen index.

Gyakori lekérés, hogy az üres email-lel rendelkező sorok kellenek.
Két megoldás lenne:
1. index az email oszlopra, amit feleslegesnek érzek, mert sokkal több adat lenne, mint amennyi nekem kell.
2. egy redundáns oszlop email_null és arra egy index. Ezt meg nem szeretném.

Tehát, van-e olyan index, hogy email="" vagy valami ilyesmi? De elhiszem, ha azt mondod, hogy nincs, csak gondoltam megkérdezem... hátha... :)
3

Indexelj

vbence · 2007. Május. 24. (Cs), 14.15
Szerintem indxelj nyugodtan. A tárhely a legolcsóbb dolog napjainkban. Ezenkívül, ha netán e-mily ím alapján keresél vissza egyszer-kétszer, overheadben is lesz jótékony hatása. (Persze kérdés, milyen gyakran szúrsz be stb, de a tárhely-foglalás miatt nem érdemes aggódni.)
4

és ha több mezőből kell összeszedni?

zzrek · 2007. Május. 24. (Cs), 17.44
Ez engem is érdekel. Előfordult már, hogy több mezőből álló kifejezés alapján szerettem volna sorberendezni, vagy szűrni. Ilyenkor mi az ideális? Gondolom az "order by kifejezés" az lassú. Marad az, hogy előre csinálok egy (plusz) oszlopot, amibe minden beíráskor kikalkulálom az összetett kifejezés értékét és arra indexelek?
5

Összetett index

Rici · 2007. Május. 24. (Cs), 19.43
Egy index állhat több mezőből is.

Ez jó arra az esetre, ha azon mezők szerint akarsz rendezni.

Persze arra figyelj, hogyha ORDER BY oszlop1, oszlop2 DESC a rendezés, akkor az index is oszlop1, oszlop2 DESC legyen, ne mondjuk oszlop1, oszlop2 és ne is oszlop2, oszlop1.
6

desc

vbence · 2007. Május. 25. (P), 10.38
Ez így van, kivéve a DESC-et. Főleg azért, mert a mysql indexnél figyelmen kívül hagyja (mindig ASC sorrendet tárol).
7

bonyolultabbra gondoltam

zzrek · 2007. Május. 25. (P), 15.57
Köszönöm, hasznos tanácsok, és be is tartom (egyébként azt hogy lehet észrevenni, hogy egy "order by"-nál a már létező indexek felhasználásra kerültek-e?), de én bonyolultabb kifejezésre gondoltam, pl:
order by INSTR(str,substr)+INSTR(str2,substr2)
Úgy értem, hogy order by-nál bármilyen kifejezést használhatok; nincs olyan mód, hogy ezt indexben is megtehessem? (Mert akkor mi marad, ha nem az adatbázis áttervezése, új oszlop használata?) (A példa nem életszerű, de hasonló problémám volt már)
Köszi.
8

functional index

Hodicska Gergely · 2007. Május. 25. (P), 16.27
MySQL esetén index szinten ilyet nem tudsz (kivéve a hosszúság beállítása). PostgreSQL esetén pl. van functional index, ami azt tudja, mint amit Te is szeretnél. Az indexhasználatot pedig az EXPLAIN parancs segítségével tudod megnézni.


Üdv,
Felhő
9

köszi

zzrek · 2007. Május. 25. (P), 19.59
Köszi, így már teljes a kép. Mivelhogy a Postgre tudja, legalább mostmár tudom, hogy nem kérdeztem nagy butaságot :-) Köszi, hogy EXPLAINelted számomra a kérdést ;-)