phpbar.de logo

Mailinglisten-Archive

Was ist performanter varchar oder set?

Was ist performanter varchar oder set?

Ruediger Weiss ruediger_weiss@web.de
Tue Nov 19 12:27:23 2002


Hallo Andreas,

> ich habe eine Tabelle, in der mehrere Felder zur genaueren Bestimmung 
> des Datensatzes dienen.
> 
> Beispiel:
> id,text,kat1,kat2,kat3,kat....
> 
> dabei sind die kat-Felder vom Typ varchar(255) und können diverse Zahlen 
> enthalten in der Form
> kat1 = 1;25;17
> kat2 = 3;7;10 etc...

> Jemand eine Idee oder einen Tipp oder liege ich völlig auf dem Holzweg?

RegExpr. sind toll, aber im Vergleich zu "purem" sql meines Wissens langsam.

Wenn ich das richtig sehe, möchtest du eine n:m Verknüpfung abbilden.
Ich würde die Struktur aufteilen: eine Tabelle mit dem "eigentlichen" Datensatz,
ein Tabelle mit den "Kategorien" (Inhalt deines Vergleichsfeldes, pro Eintrag eine Zeile),
eine Mapping-Tabelle in der die Verknüpfungen stehen (pro Zeile: ID Datensatz, ID Kategorie)

Auslesen dann mit join. Mit den richtigen Indizes geht das sehr performant.

Beispiel:

create table artikel (id int, name char(30) );
create table gruppen (id int, name char(30));
create table mapping (art_id int, grp_id int );

-- drei Artikel anlegen
insert into artikel values( 1, 'Artikel 1');
insert into artikel values( 2, 'Artikel 2');
insert into artikel values( 3, 'Artikel 3');

-- drei Gruppen anlegen
insert into gruppen values( 1, 'Gruppe 1');
insert into gruppen values( 2, 'Gruppe 2');
insert into gruppen values( 3, 'Gruppe 3');

-- Artikel 1 ist in Gruppe 1, 2 und 3
insert into mapping values( 1, 1);
insert into mapping values( 1, 2);
insert into mapping values( 1, 3);

-- Artikel 2 ist in Gruppe 1
insert into mapping values( 2, 1);

-- Artikel 3 ist in Gruppe 1
insert into mapping values( 3, 1);

-- Alle Artikel aus Gruppe 1 auslesen
select * from artikel, mapping 
   where 
         mapping.art_id = artikel.id 
         and 
         mapping.grp_id = 1


Gruß, Rüdiger
______________________________________________________________________________
Jetzt 52 verschiedene Briefpapiere für Ihre E-Mails bei
WEB.DE FreeMail - http://freemail.web.de/features/?mc=021140

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive