Indizes kopieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Indizes kopieren

    Hallo,

    ich arbeite an einem Projekt, bei dem ich, neben einer zentralen Datenbank, pro Kunden eine Datenbank erstelle.

    Das Erstellen eines neuen Kunden ist ja nicht wirklich problematisch, schwieriger wird es, wenn ich die bestehenden Tabellen mit dem Prototypen der Kundendatenbank abgleichen will.

    Ich bin derzeit so weit, das Tabellen, deren Eigenschaften, deren Spalten und deren Eigenschaften übertragen werden (neue Tabellen hinzugefügt, wenn ich eine Tabelle aus dem Prototypen lösche, löscht das PHPSkript auch die entsprechende Tabelle in den Slave-Systemen.


    Meine Daten hole ich mir mit:

    SHOW TABLE STATUS FROM master_db;

    SHOW FULL FIELDS FROM master_db.table;

    und halt


    SHOW INDEX FROM master_db.table;


    Und da ist dann auch mein Problem: habe ich einen Key, der über mehrere Spalten geht, müsste ich mein Skript umbauen.

    Gibt es eine Möglichkeit (Abfrage) die mir so etwas wie :

    Code:
    Key          Field                  Indextype
    -----------------------------------------
    PRIMARY      tabelle_id             BTREE
    text         feld_1(4), feld_2(5)   BTREE
    zurückgibt?

  • #2
    http://dev.mysql.com/doc/refman/5.1/en/show.html

    z.B. SHOW INDEX usw.

    Kommentar


    • #3
      Re: Indizes kopieren

      Original geschrieben von Lennynero
      ich arbeite an einem Projekt, bei dem ich, neben einer zentralen Datenbank, pro Kunden eine Datenbank erstelle.
      Gibt es eine verflixt gute Begruendung fuer ein solches Vorgehen?

      Normalerweise gehoeren Daten gleicher Struktur auch in die gleiche Tabelle.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Hi,

        danke für die schnelle Antwort, aber SHOW INDEX FROM (bzw. die Aliase) hatte ich schon gefunden.

        Ein Problem des Ergebnisses dort ist, das ein Index, der über mehrere Spalten geht über mehrere Zeilen verteilt ist:

        Code:
        Table	Non_unique	Key_name	        Seq_in_index	Column_name	Collation	Cardinality	Index_type
        tbl_kategorie	0	PRIMARY	                1	        kategorie_id	A	        15		BTREE
        tbl_kategorie	1	kategorie_SRLR	        1	        kategorie_rt_id	A	        5	        BTREE
        tbl_kategorie	1	kategorie_SRLR	        2	        kategorie_lft	A	        15		BTREE
        tbl_kategorie	1	kategorie_SRLR	        3	        kategorie_rgt	A	        15		BTREE

        EDIT: den Rest vergessen


        Code:
        Table	Keyname	Columns
        tbl_kategorie	PRIMARY	kategorie_id
        tbl_kategorie	kategorie_SRLR	kategorie_root_id, kategorie_lft, kategorie_rgt
        Wäre quasi optimal

        Kommentar


        • #5
          Re: Re: Indizes kopieren

          Original geschrieben von wahsaga
          Gibt es eine verflixt gute Begruendung fuer ein solches Vorgehen?

          Normalerweise gehoeren Daten gleicher Struktur auch in die gleiche Tabelle.
          http://www.php-resource.de/forum/sho...threadid=93434

          Kommentar


          • #6
            Mit dem Zugriff auf die Datenbank "information_schema" geht so einiges:

            Code:
            SELECT
            INDEX_NAME,
            (SELECT GROUP_CONCAT(IF(SUB_PART IS  NULL, COLUMN_NAME, CONCAT(COLUMN_NAME, '(', SUB_PART , ')')) SEPARATOR  ', ')
            FROM information_schema.STATISTICS D
            WHERE D.INDEX_NAME = S.INDEX_NAME AND
            TABLE_SCHEMA = 'prototyp'
            AND TABLE_NAME = 'tbl_kategorie' ORDER BY SEQ_IN_INDEX) AS Index_Columns
            ,INDEX_TYPE
            FROM information_schema.STATISTICS S
            WHERE TABLE_SCHEMA = 'prototyp'
            AND TABLE_NAME = 'tbl_kategorie'
            
            #ALTER TABLE table ADD INDEX [index]([column1],[column2])
            Erbringt mir die Zeilen, die quasi genau die von mir benötigten Infos haben
            Zuletzt geändert von Lennynero; 29.01.2009, 21:39.

            Kommentar

            Lädt...
            X