Hier ist, was ich habe:Composite-Schlüssel VS Primärschlüssel + nicht eindeutigen Index
table content : cat_id product_id data1 data2 etc.
die Kategorien offensichtlich nicht eindeutig sind. Die Produkt-IDs sind einzigartig.
2 queries : 1 -- SELECT * WHERE cat_id = :cat - must be as quick as possible 2 -- SELECT * WHERE product_id = :prodId In second select, I can add : AND cat_id = :cat
Was ist effizienter?
- 1 - index (nicht eindeutig) auf cat_id (gut für select 1)
- 2 - Primärschlüssel auf product_id (unique -> sehr gut für ausgewählten 2)
- 3 - Index (nicht unique) auf cat_id + PK auf product_id (gut für 1 & 2 getrennt)
- 4 - eindeutige Einschränkung mit composite [cat_id + product_id] (gut für 1 & 2 zusammen)
- 5 - das gleiche wie 4, b ut Definition der Verbund als PK
- 6 - Kunstoff (4 oder 5) + Einzelindex/PK
Informationen, werde ich rund 20 Produkte in jeder Kategorie und viele Kategorien (etwa 3000) haben - Und (wie es einzigartig in der Tabelle ist) EIN Produkt gehört nur zu einer Kategorie - In der Tat, das ist nicht wirklich Katzen und Produkte, das ist für die Einfachheit der Erklärung;)
danke!
Nur ein Kopf in Option 4: Wenn ich mich richtig erinnere, kann MySQL die ersten Teile eines zusammengesetzten Schlüssels verwenden. Das heißt, wenn Sie Ihre Schlüssel wie in Option 4 definieren und dann eine Abfrage mit "WHERE cat_id = ..." erstellen, kann MySQL den Index verwenden (nicht so bei "WHERE product_id = ..."). http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html – Sebastianb
@Sebastianb - Danke, das ist die Art von Dingen, die ich nicht weiß: wie erstellt und später verwendet werden - zusammengesetzte Schlüssel vom Motor. Also, sagen wir in phpMyAdmin, die ORDER, in der wir die Zeilen setzen, wenn wir einen zusammengesetzten Index definieren, ist wichtig? [cat_id + produkt_id]! = [produkt_id + cat_id]? Ich habe die fünfte Option hinzugefügt. Hinzufügen der Zusammensetzung als PK ist immer besser, nicht? –
Solange Sie nicht NULL Katzen und Produkte haben, können Sie nur den zusammengesetzten Schlüssel PK und ich denke, es wäre in Ordnung (überprüfen Sie hier für Unterschiede zwischen eindeutigen Indizes und PK's: http://StackOverflow.com/Questions/487314/primary -key-or-unique-index). Wenn Sie jedoch eine product_id finden möchten, werden Sie den zusammengesetzten Index nicht verwenden, also denke ich, dass es besser wäre, product_id als PK und cat_id als Index zu deklarieren. – Sebastianb