Hallo,
folgendes Szenario:
Ich habe eine Kalenderanwendung bei der jeder User für jeden Tag eine Uhrzeit (von, bis) und eine Notiz eintragen kann.
Die entscheidenden Tabellen sind im Entwicklungsstatus und sind wie folgt aufgebaut:
Nun meine Fragen.
Wie ist es für die Performance am Besten?
Lege ich für jedes Jahr eine neue Tabelle an oder kommen alle Einträgen von den nächsten x-Jahren in eine Tabelle?
Ist eine Abfrage wie z.B.
mit einem Index auf das Datum noch für alle User schnell genug?
Denn die Tabelle "kalendereinträge" kann bei 3.000 Usern nach einem Jahr schnell mal über 1.000.000 Datensätze enthalten.
Vielen Dank für Eure Tipps, Ratschläge und Verbesserungsvorschläge.
Gruß
coding007.
folgendes Szenario:
Ich habe eine Kalenderanwendung bei der jeder User für jeden Tag eine Uhrzeit (von, bis) und eine Notiz eintragen kann.
Die entscheidenden Tabellen sind im Entwicklungsstatus und sind wie folgt aufgebaut:
Code:
CREATE TABLE kalendereintraege (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
datum DATETIME NOT NULL ,
von TINYINT UNSIGNED NOT NULL ,
bis TINYINT UNSIGNED NOT NULL ,
tag_kuerzel TINYINT UNSIGNED NOT NULL ,
notiz VARCHAR(255) NULL ,
PRIMARY KEY(id) ,
INDEX kalendereintraege_datum_index(datum))
TYPE=InnoDB;
CREATE TABLE benutzer (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
benutzername VARCHAR(20) NOT NULL ,
passwort VARCHAR(20) NOT NULL ,
geaendert DATETIME NOT NULL ,
erstellt DATETIME NOT NULL ,
PRIMARY KEY(id) ,
INDEX benutzer_benutzername_index(benutzername)
TYPE=InnoDB;
CREATE TABLE benutzer_hah_kalendereintraege (
benutzer_id INTEGER UNSIGNED NOT NULL ,
kalendereintraege_id INTEGER UNSIGNED NOT NULL ,
PRIMARY KEY(benutzer_id, kalendereintraege_id) ,
INDEX benutzer_hat_kalendereintraege_FKIndex1(benutzer_id) ,
INDEX benutzer_hat_kalendereintraege_FKIndex2(kalendereintraege_id),
FOREIGN KEY(benutzer_id)
REFERENCES benutzer(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(kalendereintraege_id)
REFERENCES kalendereintraege(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
TYPE=InnoDB;
Wie ist es für die Performance am Besten?
Lege ich für jedes Jahr eine neue Tabelle an oder kommen alle Einträgen von den nächsten x-Jahren in eine Tabelle?
Ist eine Abfrage wie z.B.
Code:
select * from kalendereintraege where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= datum;
Denn die Tabelle "kalendereinträge" kann bei 3.000 Usern nach einem Jahr schnell mal über 1.000.000 Datensätze enthalten.
Vielen Dank für Eure Tipps, Ratschläge und Verbesserungsvorschläge.
Gruß
coding007.

Kommentar