Betrachten Sie die folgende Tabelle in Postgres 9.4:
CREATE TABLE t
(
a1 bigserial,
a2 bigint NOT NULL,
a3 bigint NOT NULL,
a4 integer,
a5 timestamp with time zone NOT NULL,
a6 timestamp with time zone NOT NULL DEFAULT now(),
a7 bigint NOT NULL,
a8 bigint NOT NULL,
a9 real,
a10 integer,
CONSTRAINT kkkey PRIMARY KEY (a1)
)
Was sind die geschätzten Kosten zum Speichern dieser Tabelle?
Ein Rekord kostet:
size(bigserial)
+ size(bigint)
+ size(bigint)
+ size(integer)
+ size(timestamp)
+ size(timestamp)
+ size(bigint)
+ size(bigint)
+ size(real)
+ size(integer)
= 8 + 8 + 8 + 4 + 8 + 8 + 8 + 8 + 4 + 4 = 68 bytes
Das Datenbankseitenlayout von Postgres enthält ziemlich detaillierte Informationen darüber, wie die Datensätze im Sekundärspeicher landen, aber ich bin nicht sicher, wie alle Zahlen zusammengefügt werden sollen.
Die Linux-Berichte
blockdev --getbsz /dev/sda1
1024
Fragen:
(1) Gibt es Hilfsfunktionen zur Bewertung der Speicherkosten pro Zeile (so dass diese komplizierten Berechnungen nicht von Hand durchgeführt werden müssen)?
(2) Wie werden die Zahlen zusammengestellt, dh die Gemeinkosten für jede Zeile geschätzt?
(3) Wie werden die Kosten für den Primärschlüsselindex geschätzt?