frage zu mysql dump

Gesperrt
emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

frage zu mysql dump

Beitrag von emergence » Mi 17. Dez 2003, 16:24

wenn ich nen dump zeihe erhalte ich ne menge key werte
ist das so beabsichtigt ?

Code: Alles auswählen

DROP TABLE IF EXISTS con_cat;
CREATE TABLE con_cat(
  idcat INT(10) NOT NULL default '0',
  idclient INT(10) NOT NULL default '0',
  parentid INT(10) NOT NULL default '0',
  preid INT(10) NOT NULL default '0',
  postid INT(10) NOT NULL default '0',
  status INT(10) NOT NULL default '0',
  author VARCHAR(32) NOT NULL default '',
  created DATETIME NOT NULL default '0000-00-00 00:00:00',
  lastmodified DATETIME NOT NULL default '0000-00-00 00:00:00',
  KEY idcat (idcat),
  KEY parentid (parentid, preid),
  KEY idcat_2 (idcat),
  KEY idcat_3 (idcat),
  KEY idcat_4 (idcat),
  KEY idcat_5 (idcat),
  KEY idcat_6 (idcat),
  KEY idcat_7 (idcat),
  KEY idcat_8 (idcat),
  KEY idcat_9 (idcat),
  KEY idcat_10 (idcat),
  KEY idclient_11 (idclient)
);

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mi 17. Dez 2003, 16:39

nein. Bei jedem Upgrade erzeugt MySQL einen neuen Key (z.b. wenn ich create key mit dem namen "key1" mache, macht MySQL dann "key1_1" draus, usw) - man müßte daher prüfen, ob der Key schon existiert, bin ich aber bisher noch nicht dazugekommen...

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 18. Dez 2003, 10:37

ich hab mir das jetzt ein wenig angesehen...

die überprüfung ob ein key existiert kann man sich eigentlich sparen wenn man die alter table wie folgt umdefiniert...

Code: Alles auswählen

alter table con_actions add index name(name)
man könnte eigentlich auch

Code: Alles auswählen

alter table con_actions add key name(name)
schreiben... das macht an sich keinen unterschied...

die verdoppelung passiert dann wenn wie jetzt folgende syntax verwendet wird

Code: Alles auswählen

alter table con_actions add index (name)
in diesem fall vergibt mysql einen neuen namen wenn bereits ein index mit name existiert -> name_2

korrigier mich bitte wenn ich mich irre...

was bei mir witziger weise nicht funktioniert ist wenn ich den parameter [ignore] mit dazu angebe... das hat bei mir keine auswirkungen... fehlermeldung erhalte ich trotzdem... (obwohl es mein mysql server unterstützen sollte)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 22. Dez 2003, 18:08

ich hab mal ne neue indizies zusammen gestellt für die base.sql
alle anderen ALTER TABLE (am beginn und am ende werden durch diese ersetzt beide wurden zusammengefügt)

Code: Alles auswählen

ALTER TABLE !PREFIX!_actions ADD INDEX idarea (idarea);
ALTER TABLE !PREFIX!_actions ADD FULLTEXT KEY name (name);
ALTER TABLE !PREFIX!_actions ADD INDEX name_2 (name);

ALTER TABLE !PREFIX!_area ADD INDEX idarea (idarea, name, online);
ALTER TABLE !PREFIX!_area ADD FULLTEXT KEY name (name);
ALTER TABLE !PREFIX!_area ADD INDEX idarea_2 (idarea);
ALTER TABLE !PREFIX!_area ADD INDEX name_2 (name);

ALTER TABLE !PREFIX!_art ADD INDEX idart (idart);
ALTER TABLE !PREFIX!_art ADD INDEX idclient (idclient);

ALTER TABLE !PREFIX!_art_lang ADD INDEX idart (idart);
ALTER TABLE !PREFIX!_art_lang ADD INDEX idlang (idlang);
ALTER TABLE !PREFIX!_art_lang ADD INDEX idtplcfg (idtplcfg, idart);
ALTER TABLE !PREFIX!_art_lang ADD INDEX idart_2 (idart, idlang);

ALTER TABLE !PREFIX!_cat ADD INDEX idclient (idclient);
ALTER TABLE !PREFIX!_cat ADD INDEX idcat (idcat);
ALTER TABLE !PREFIX!_cat ADD INDEX idclient_2 (idclient, parentid);
ALTER TABLE !PREFIX!_cat ADD INDEX parentid (parentid, preid);

ALTER TABLE !PREFIX!_cat_art ADD INDEX is_start (is_start, idcat);
ALTER TABLE !PREFIX!_cat_art ADD INDEX idart (idart);
ALTER TABLE !PREFIX!_cat_art ADD INDEX idcat (idcat);
ALTER TABLE !PREFIX!_cat_art ADD INDEX idcatart (idcatart);

ALTER TABLE !PREFIX!_cat_lang ADD INDEX idcat (idcat);
ALTER TABLE !PREFIX!_cat_lang ADD INDEX idcatlang (idcatlang);
ALTER TABLE !PREFIX!_cat_lang ADD INDEX idlang (idlang);
ALTER TABLE !PREFIX!_cat_lang ADD INDEX idtplcfg (idtplcfg);
ALTER TABLE !PREFIX!_cat_lang ADD INDEX idlang_2 (idlang, visible);
ALTER TABLE !PREFIX!_cat_lang ADD INDEX idlang_3 (idlang, idcat);

ALTER TABLE !PREFIX!_cat_tree ADD INDEX idcat (idcat);

ALTER TABLE !PREFIX!_code ADD INDEX idcatart (idcatart);
ALTER TABLE !PREFIX!_code ADD INDEX idlang (idlang);
ALTER TABLE !PREFIX!_code ADD INDEX idclient (idclient);

ALTER TABLE !PREFIX!_container ADD INDEX idtpl (idtpl);
ALTER TABLE !PREFIX!_container ADD INDEX number (number);

ALTER TABLE !PREFIX!_container_conf ADD INDEX number (number);
ALTER TABLE !PREFIX!_container_conf ADD INDEX idtplcfg (idtplcfg);

ALTER TABLE !PREFIX!_content ADD INDEX idartlang (idartlang);
ALTER TABLE !PREFIX!_content ADD INDEX idtype (idtype);
ALTER TABLE !PREFIX!_content ADD INDEX typeid (typeid);

ALTER TABLE !PREFIX!_frame_files ADD INDEX idarea (idarea, idframe, idfile);

ALTER TABLE !PREFIX!_keywords ADD INDEX keyword (keyword);
ALTER TABLE !PREFIX!_keywords ADD INDEX idlang (idlang);
ALTER TABLE !PREFIX!_keywords ADD INDEX idlang2 (idlang, keyword);

ALTER TABLE !PREFIX!_mod ADD INDEX idclient (idclient);
ALTER TABLE !PREFIX!_mod ADD INDEX idclient_2 (idmod, idclient);

ALTER TABLE !PREFIX!_template ADD INDEX idclient (idclient);
ALTER TABLE !PREFIX!_template ADD INDEX idlay (idlay);
ALTER TABLE !PREFIX!_template ADD INDEX idtpl (idtpl);
ALTER TABLE !PREFIX!_template ADD INDEX idtplcfg (idtplcfg);

ALTER TABLE !PREFIX!_template_conf ADD INDEX idtpl (idtpl);
ALTER TABLE !PREFIX!_template_conf ADD INDEX idtplcfg (idtplcfg);

ALTER TABLE !PREFIX!_upl ADD INDEX idclient (idclient);
damit sollte es jetzt in weiterer folge keine doppelten indizies mehr geben.
es wurden auch 2 indizies entfernt die fehlerhaft waren... (zwei spalten existierten nicht) doppelt definierte wurden ebenso entfernt...

für mich ist das problem somit behoben...
http://bugs.contenido.de/bug_view_page. ... id=0000124
vielleicht in weiterer folge mal ein script ergänzen das alle bestehenden keys löscht (bis auf den primary key) und dann erst die keys neu hinzufügen...

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » So 11. Jan 2004, 15:37

leider gibt es auch mit dieser Syntax duplikate...MySQL hängt dann einfach ein _2 oder _3 an...

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 11. Jan 2004, 18:21

welche mysql version verwendest du ? bei meiner tritt das nicht auf... (3.23.47)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » So 11. Jan 2004, 19:09

3.23.58.

ich habe es jetzt anders gelöst, die Indizes von allen Contenido-eigenen Tabellen werden erst gelöscht und dann neu angelegt.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 19. Jan 2004, 13:49

hab mir das jetzt im snapshot angesehen...
das mit den keys vorher entfernen ist okay ;-)
da steht in der base.sql noch immer die indizies getrennt von einander... am anfang und am ende der datei...
hat das einen grund warum das nicht zusammen geführt wird ?

am ende wieder die syntax die zur verdoppelung führen könnte...
ALTER TABLE !PREFIX!_content ADD INDEX (typeid);

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 19. Jan 2004, 14:26

keine ahnung, ich füge meine indizes immer an den Anfang an. muß mal bei den kollegen fragen

Gesperrt