Hier ist die Frage ...
Was sollten meine Überlegungen angesichts von 192 Billionen Datensätzen sein?
Mein Hauptanliegen ist die Geschwindigkeit.
Hier ist der Tisch ...
CREATE TABLE `ref` (
`id` INTEGER(13) AUTO_INCREMENT DEFAULT NOT NULL,
`rel_id` INTEGER(13) NOT NULL,
`p1` INTEGER(13) NOT NULL,
`p2` INTEGER(13) DEFAULT NULL,
`p3` INTEGER(13) DEFAULT NULL,
`s` INTEGER(13) NOT NULL,
`p4` INTEGER(13) DEFAULT NULL,
`p5` INTEGER(13) DEFAULT NULL,
`p6` INTEGER(13) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY (`s`),
KEY (`rel_id`),
KEY (`p3`),
KEY (`p4`)
);
Hier sind die Fragen ...
SELECT id, s FROM ref WHERE red_id="$rel_id" AND p3="$p3" AND p4="$p4"
SELECT rel_id, p1, p2, p3, p4, p5, p6 FROM ref WHERE id="$id"
INSERT INTO rel (rel_id, p1, p2, p3, s, p4, p5, p6)
VALUES ("$rel_id", "$p1", "$p2", "$p3", "$s", "$p4", "$p5", "$p6")
Hier sind einige Notizen ...
- Die SELECT's werden viel häufiger ausgeführt als die INSERT. Gelegentlich möchte ich jedoch ein paar hundert Datensätze gleichzeitig hinzufügen.
- Last-weise wird es stundenlang nichts geben, dann vielleicht ein paar tausend Abfragen auf einmal.
- Glaube nicht, dass ich mich mehr normalisieren kann (brauche die p-Werte in einer Kombination)
- Die gesamte Datenbank ist sehr relational.
- Dies wird mit Abstand der größte Tisch sein (der nächstgrößere ist ungefähr 900.000).
UPDATE (08/11/2010)
Interessanterweise habe ich eine zweite Option gegeben ...
Anstelle von 192 Billionen könnte ich 2,6 * 10 ^ 16 (15 Nullen, was 26 Billionen bedeutet) speichern ...
Aber in dieser zweiten Option müsste ich nur eine Bigint (18) als Index in einer Tabelle speichern. Das war's - nur die eine Spalte. Ich würde also nur prüfen, ob ein Wert vorhanden ist. Hin und wieder Datensätze hinzufügen, nie löschen.
Das lässt mich denken, dass es eine bessere Lösung als mysql geben muss, um einfach Zahlen zu speichern ...
Sollte ich diese zweite Option annehmen oder bei der ersten bleiben ...
[edit] Ich habe gerade die Nachricht erhalten, dass einige Tests durchgeführt wurden - 100 Millionen Zeilen mit diesem Setup geben die Abfrage in 0,0004 Sekunden zurück. [/ edit]