php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.10.2011, 22:24  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard [Erledigt] Autom. erstellter Index in InnoDB

Hallo!

Ich habe (InnoDB Engine) u.a. folgende Tabelle (Create Code) mit Foreign Keys und alles funktioniert soweit (Abfragen etc..)

Aber.. nun ist es so das mir von MySql automatisch dazu ein Index erstellt wird - siehe unten bei den **.

Kann mir jemand sagen warum dieser Indes autom. erstellt wurde, ich versteh das nicht ganz und würde gerne wissen warum...

Das hier http://dev.mysql.com/doc/refman/5.5/...nstraints.html hab ich druch, aber ich begreife es immer noch nicht... Vor allem .. warum bei dem zweiten Constraint kein index erstellt wurde sondern nur bei den ersten, denn jedes Ziel des FK ist ein Primärschlüssel. Somit ist "tab_tipps.NicknameRef" nichts anderes als "tab_tipps.SpielIDRef" aber da gibt es keinen autom. Index.



PHP-Code:
CREATE TABLE `tab_tipps` (
    `
TippIDINT(10NOT NULL AUTO_INCREMENT,
    `
NicknameRefVARCHAR(15NOT NULL COLLATE 'latin1_german1_ci',
    `
SpielIDRefINT(10NOT NULL,
    `
TippTor1TINYINT(2NOT NULL,
    `
TippTor2TINYINT(2NOT NULL,
    `
PunkteTINYINT(4NOT NULL DEFAULT '0',
    `
gespeichertAmTIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    
PRIMARY KEY (`TippID`),
    
UNIQUE INDEX `Nickname_SpielIDRef` (`NicknameRef`, `SpielIDRef`),
**  
INDEX `FK_tab_tipps_tab_spiele` (`SpielIDRef`),
    
CONSTRAINT `FK_tab_tipps_tab_spieleFOREIGN KEY (`SpielIDRef`) REFERENCES `tab_spiele` (`SpielID`) ON UPDATE CASCADE,
    
CONSTRAINT `FK_tab_tipps_tab_userFOREIGN KEY (`NicknameRef`) REFERENCES `tab_user` (`Nickname`) ON UPDATE CASCADE
)
COLLATE='latin1_german1_ci'
ENGINE=InnoDB
AUTO_INCREMENT
=1957
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.10.2011, 00:18  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Für NicknameRef wurde kein Index erstellt, da hier der Index "Nickname_SpielIDRef" verwendet werden kann.

Grüße.
php1704 ist offline   Mit Zitat antworten
Alt 15.10.2011, 09:05  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Ah, sehr clever, Danke Dir!
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Alt 16.10.2011, 20:02  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Automatische Indizes kommen idR von den ForeignKeys.
Der von php1407 genannte Index kann nicht verwendet werden, da er an der "falschen Stelle" steht.
Zweiter Punkt unter dem Code-Beispiel: http://dev.mysql.com/doc/refman/5.1/...nstraints.html
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 16.10.2011, 20:33  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

PHP-Code:
...
    
PRIMARY KEY (`TippID`), 
    
UNIQUE INDEX `Nickname_SpielIDRef` (`NicknameRef`, `SpielIDRef`), 
**  
INDEX `FK_tab_tipps_tab_spiele` (`SpielIDRef`), 
    
CONSTRAINT `FK_tab_tipps_tab_spieleFOREIGN KEY (`SpielIDRef`) REFERENCES `tab_spiele` (`SpielID`) ON UPDATE CASCADE
    
CONSTRAINT `FK_tab_tipps_tab_userFOREIGN KEY (`NicknameRef`) REFERENCES `tab_user` (`Nickname`) ON UPDATE CASCADE 

Also der ** INDEX oben wurde von mysql automatisch angelegt im Zuge der Erstellung der Fremdschlüssel, richtig.

Aber mir ging es ja darum warum nur dieser eine autom. erstellt wurde und warum kein zweiter. Vom Prinzip sind beide ident, also in der tab_spiele liegen die Spiele und unter tab_user die User. tab_tipps hat jweils die userid und die spielid als Fremdschlüssel jeweils zum PrimaryKey der jeweils anderen Tabelle.
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Alt 16.10.2011, 20:37  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hast du den Link gelesen?
Dort steht genau beschrieben, warum - weil NicknameRef bereits in einem Index als ERSTE Spalte steht.
Und da SpieleIDRef zwar auch im UNIQE drin ist, aber nicht an ERSTER Stelle musste MySQL dafür einen Index anlegen.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 16.10.2011, 20:49  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Ja und dann passt der Post doch auch vom php1704

PHP-Code:
UNIQUE INDEX `NicknameRef_SpielIDRef` (`NicknameRef`, `SpielIDRef`) 
Zitat:
Für NicknameRef wurde kein Index erstellt, da hier der Index "NicknameRef_SpielIDRef" verwendet werden kann.
Zitat:
weil NicknameRef bereits in einem Index als ERSTE Spalte steht.
Und da SpieleIDRef zwar auch im UNIQE drin ist, aber nicht an ERSTER Stelle musste MySQL dafür einen Index anlegen.
PHP-Code:
**  INDEX `FK_tab_tipps_tab_spiele` (`SpielIDRef`), 
Genau aus diesem Gründen wurde "nur" ein INDEX für SpielIDRef autom. erstellt, weil der für NicknameRef schon verwendbar war - weil an erster Stelle von dem UNIQUE NicknameRef_SpielIDRef.

Danke!
__________________
Keine Zahl != ein Zeichen das keine Zahl ist

Geändert von hausl (16.10.2011 um 20:52 Uhr).
hausl ist offline   Mit Zitat antworten
Alt 17.10.2011, 07:51  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm...igendwie hatte ich seinen Post gestern anders aufgefasst. Das Wochenende war zu kurz :-/
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 17.10.2011, 08:52  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Oh, das kenn ich.. Doch danke, denn nun kenne ich nicht nur den Grund sondern auch den Hintergrund, das war mir vorher nicht ganz klar.

LG
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] InnoDB Constraints Andreas Datenbanken 5 13.01.2011 16:16
[Erledigt] MyISAM vs InnoDB bitsnack Datenbanken 17 03.11.2010 10:13
[Erledigt] MYSQL INDEX Frage 700.000 Datensätze ? c01001 Datenbanken 2 20.04.2009 13:55
[Erledigt] Nur Wörter rund um ein gesuchtes Wort zeigen djscaleo PHP Tipps 2009 26 13.04.2009 12:57
php datei löschen djscaleo PHP Tipps 2008 21 14.11.2008 15:47
Einstellungen InnoDB PsychoEagle Datenbanken 3 13.08.2008 16:27
Undefined variable Undefined property: block xxJJxx PHP Tipps 2008 16 05.08.2008 15:30
Notice: Undefined index Kein Genie PHP Tipps 2008 5 23.04.2008 17:40
Prototype Ajax Array Datenmüll notyyy HTML, Usability und Barrierefreiheit 2 08.04.2008 10:57
Array index updaten obi PHP Tipps 2008 4 28.11.2007 15:08
Tipp zur Volltextsuche? InnoDB zu MyISAM? bicpi Datenbanken 0 21.09.2006 17:43
MySQL startet nicht mehr: InnoDB Hendrik007 Datenbanken 7 05.07.2006 11:21
Beziehungen mit InnoDB??? T.Peters PHP Tipps 2006 1 25.01.2006 18:29
2 verschachtelte while Schleifen. Großes Performanceproblem Datenbanken 3 30.05.2005 12:52
[Erledigt] MySQL findet Datenbank nicht Datenbanken 10 21.10.2004 09:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
innodb index, innodb index ja oder nicht, engine=innodb auto_increment=389, innodb index wird nicht verwendet

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum