yo,
welches dbms und welche version ? beispieldaten angeben, sowohl inhalte der tabellen als auch das gewünschte result.
Von der dritten Tabelle, die präfix_kommentare heißt, brauche ich den count(*), wieviele Kommentare (Zeilen) von "where C.userid=1" in der Spalte Userid vorhanden sind.
wie du diesen COUNT einbaust, ist abhängig von deinem dbms und der version. deswegen ist es immer wichtig, diesen zu kennen. desweiteren ist es interessant zu wissen, wo die selektion C.userid=1 stattfinden soll, sprich ob sie sich auf die ganze query auswirken soll oder nur auf den count. deswegen sind beispiele so wichtig, weil sie meistens für uns mehr aussagen als erklärungen.
Wenn man die obere Query abfrage, braucht er ungefähr 0.03.. Sekunden. Das ist normalerweise schlecht ne?
ich kenne kein projekt, wo 0.03 sekunden ausführungszeit ein problem wäre.
Wenn ich A.galerieid=B.galerieid=C.galerieid für die neue Query nehme, dann setze ich den PrimaryKey für alle drei Tabellen auf galerieid.
damit setzt du gar nichts, sondern du joinst die tabellen über diese spalten. PK werden einmal beim erstellen der tabellen festgelegt und ändern sich (im idealfall) nicht mehr.
- Wäre es von der Perfomance eher schlecht, bzw. überhaupt sinnvoll, wenn ich für die Tabelle präfix_kommentare 2 Primary Keys setze?
erstens kannst du keine zwei PK für eine tabelle haben. es gibt pro tabelle immer nur einen. welcher das ist, dafür gibt es in jedem rdbms spezielle anweisung, um ihn zu setzen. und zweitens vermute ich mal, du hast zwei schlüssel in der tabelle, die beide eindeutig und hoffentlich auch not null sind.
Nun meine Frage. Wenn nun ab und zu mal ein paar Zeilen von der Geo_Tabelle gelöscht werden (aus was für einem Grund auch immer) und neue Zeilen eingefügt werden mit fortlaufender ID, wäre dann ein Index besser oder ein Primary Key?
eine spalte, die als PK deklariert ist (könnnen auch mehrere spalten sein), dafür setzt das dbms automatisch einen index, um genauer zu sein, sogar einen unique index. damit wird die eindeutigkeit des PK sicher gestellt. zusätzlich wird der Constraint not null gesetzt. PK sollte man immer für einen künstlichen schlüssel der tabelle verwenden.
Ich habe irgendwo mal gelesen, dass es nicht gut sei, wenn man Zeilen löscht, wenn ein Index gesetzt ist.
das löschen, einfügen und auch das updaten ist für den index sicherlich arbeit und nicht gerade förderlich. aber deswegen kann ich ja nicht einen datensatz behalten, den ich eigentlich löschen will. das ist aufgabe des dbms, dass mit dem index wieder hinzubekommen. falls es zuviele DML operatione gab, kann man einen index auch löschen oder und neu erstellen, bzw. on the fly neu generieren lassen, falls sich die datenbank im 24/7 (dauereinsatz) betrieb befindet.
Ilja