Mysql
 sql >> Datenbank >  >> RDS >> Mysql

`aktives' Flag oder nicht?

Sie partitionieren die Tabelle nach dem Aktiv-Flag, sodass sich aktive Datensätze in einer Partition und inaktive Datensätze in der anderen Partition befinden. Dann erstellen Sie für jede Tabelle eine aktive Ansicht, die automatisch den aktiven Filter enthält. Die Datenbank-Abfrage-Engine schränkt die Abfrage automatisch auf die Partition ein, die die aktiven Datensätze enthält, was viel schneller ist, als selbst einen Index für dieses Flag zu verwenden.

Hier ist ein Beispiel zum Erstellen einer partitionierten Tabelle in Oracle. Oracle hat keine booleschen Spaltentypen, daher habe ich Ihre Tabellenstruktur für Oracle-Zwecke modifiziert.

CREATE TABLE people
(
   id       NUMBER(10),
   name     VARCHAR2(100),
   active   NUMBER(1)
)
PARTITION BY LIST(active)
(
   PARTITION active_records VALUES (0)
   PARTITION inactive_records VALUES (1)
);

Wenn Sie wollten, könnten Sie jede Partition in verschiedene Tablespaces legen. Sie können auch Ihre Indizes partitionieren.

Übrigens scheint dies eine Wiederholung von zu sein das Frage, als Neuling muss ich fragen, wie ist das Verfahren zum Umgang mit unbeabsichtigten Duplikaten?

Bearbeiten: Wie in den Kommentaren angefordert, wurde ein Beispiel zum Erstellen einer partitionierten Tabelle in Oracle bereitgestellt