From: | "Tille, Andreas" <TilleA(at)rki(dot)de> |
---|---|
To: | |
Cc: | PostgreSQL General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Performance question |
Date: | 2001-09-11 11:56:16 |
Message-ID: | Pine.LNX.4.33.0109111341240.4709-100000@wr-linux02.rki.ivbb.bund.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Mon, 10 Sep 2001, Stephan Szabo wrote:
> > explain SELECT Hauptdaten_Fall.MeldeKategorie,
> > Count(Hauptdaten_Fall.ID) AS Anz FROM Hauptdaten_Fall WHERE
> > (((Hauptdaten_Fall.IstAktuell)=20)) GROUP BY
> > Hauptdaten_Fall.MeldeKategorie ORDER BY
> > Hauptdaten_Fall.MeldeKategorie;
> >
> > Aggregate (cost=35267.33..36154.62 rows=17746 width=16)
> > -> Group (cost=35267.33..35710.98 rows=177458 width=16)
> > -> Sort (cost=35267.33..35267.33 rows=177458 width=16)
> > -> Seq Scan on hauptdaten_fall (cost=0.00..15024.12 rows=177458 width=16)
> >
> > I have nearly no experience with query optimizing but the gread difference
> > in speed tells me that something is wrong here. There were some hints in
> > the "Index usage question" thread about some fields which might be interpreted
> > as strings. Could this be a reason and how to check this?
>
> What's the schema for the table?
CREATE SEQUENCE SeqHauptdaten_Fall;
CREATE TABLE Hauptdaten_Fall (
ID int DEFAULT nextval('SeqHauptdaten_Fall') ,
InterneRef int NOT NULL ,
Zeitstempel datetime NOT NULL ,
ZeitStempelRKI datetime NOT NULL ,
IstAktuell int NOT NULL ,
IstOffen int NOT NULL ,
IstFallDef int NOT NULL ,
Wichtigkeit int NOT NULL ,
ImportTyp int NOT NULL ,
ImportStatus int NOT NULL ,
ImportFile int NOT NULL ,
FehlerZahl int NOT NULL ,
ExportTyp int NOT NULL ,
ExportStatus int NOT NULL ,
ExportFile int NOT NULL ,
QuittungsText text NULL ,
Anmerkung text NULL ,
SaveIstAktuell int NOT NULL ,
SaveIstOffen int NOT NULL ,
SaveExportStatus int NOT NULL ,
FallkennungStelle varchar (15) NOT NULL ,
FallkennungAktenzeichen varchar (50) NOT NULL ,
FallVersion int NOT NULL ,
MeldekennungStelle varchar (15) NULL ,
MeldekennungAktenzeichen varchar (50) NULL ,
MeldeKategorie varchar (10) NULL ,
MeldeSoftware varchar (50) NULL ,
MeldeZuordnung varchar (50) NULL ,
Landkreis int NOT NULL ,
MeldeJahr int NOT NULL ,
MeldeWoche int NOT NULL ,
PersonGeburtsJahr int NOT NULL ,
PersonGeburtsMonat int NOT NULL ,
GeburtstagTheoretisch datetime NULL ,
AlterTheoretisch int NOT NULL ,
PersonGeschlecht int NOT NULL ,
PersonWohnsitz int NOT NULL ,
PersonAufenthalt int NOT NULL ,
Spende int NOT NULL ,
ErkranktStatus int NOT NULL ,
ErkranktDatumVon datetime NULL ,
ErkranktDatumBis datetime NULL ,
ErregerStatus int NOT NULL ,
EpidemiologieStatus int NOT NULL ,
KlinikAufenthaltStatus int NOT NULL ,
KlinikAufenthaltDatumVon datetime NULL ,
KlinikAufenthaltDatumBis datetime NULL ,
KlinikAdresse int NOT NULL ,
VerstorbenStatus int NOT NULL ,
VerstorbenDatumVon datetime NULL ,
VerstorbenDatumBis datetime NULL ,
InfektionsOrt varchar (50) NULL ,
InfektionsOKZ varchar (50) NULL ,
InfektionsInfo text NULL ,
HerdkennungStelle varchar (15) NULL ,
HerdkennungAktenzeichen varchar (50) NULL ,
MeldeDatum datetime NULL ,
AbsenderTyp int NOT NULL ,
Absender int NOT NULL ,
Mediziner int NOT NULL ,
Labor int NOT NULL ,
WirdBetreut int NOT NULL ,
Betreuungseinrichtung int NOT NULL ,
IstBetreuer int NOT NULL ,
BetreuerArbeitsstelle int NOT NULL ,
Lebensmittel int NOT NULL ,
LebensmittelBetrieb int NOT NULL ,
ts timestamp NULL ,
CONSTRAINT PK_Fall_Hauptdaten PRIMARY KEY (FallkennungStelle,FallkennungAktenzeichen,FallVersion)
) ;
CREATE INDEX IX_IstAktuellKategorie ON Hauptdaten_Fall(IstAktuell, MeldeKategorie);
CREATE UNIQUE INDEX IX_ID_Hauptdaten_Fall ON Hauptdaten_Fall(ID);
CREATE INDEX IX_MeldeJahr ON Hauptdaten_Fall(MeldeJahr);
CREATE INDEX IX_MeldeWoche ON Hauptdaten_Fall(MeldeWoche);
CREATE INDEX IX_Landkreis ON Hauptdaten_Fall(Landkreis);
CREATE INDEX IX_ErkranktStatus ON Hauptdaten_Fall(ErkranktStatus);
CREATE INDEX IX_ErregerStatus ON Hauptdaten_Fall(ErregerStatus);
CREATE INDEX IX_EpidemiologieStatus ON Hauptdaten_Fall(EpidemiologieStatus);
CREATE INDEX IX_KlinikAufenthaltStatus ON Hauptdaten_Fall(KlinikAufenthaltStatus);
CREATE INDEX IX_VerstorbenStatus ON Hauptdaten_Fall(VerstorbenStatus);
CREATE INDEX IX_ImportStatus ON Hauptdaten_Fall(ImportStatus);
CREATE INDEX IX_ExportStatus ON Hauptdaten_Fall(ExportStatus);
CREATE INDEX IX_ImportFile ON Hauptdaten_Fall(ImportFile);
CREATE INDEX IX_ExportFile ON Hauptdaten_Fall(ExportFile);
CREATE INDEX IX_Herd ON Hauptdaten_Fall(HerdkennungStelle, HerdkennungAktenzeichen);
CREATE INDEX IX_ImportTyp ON Hauptdaten_Fall(ImportTyp);
CREATE INDEX IX_ExportTyp ON Hauptdaten_Fall(ExportTyp);
CREATE INDEX IX_MeldeKategorie_Hauptdaten_Fa ON Hauptdaten_Fall(MeldeKategorie);
CREATE INDEX IX_IstFallDef ON Hauptdaten_Fall(IstFallDef);
CREATE INDEX IX_SaveIstAktuell ON Hauptdaten_Fall(SaveIstAktuell);
CREATE INDEX IX_FallVersion ON Hauptdaten_Fall(FallVersion);
CREATE INDEX IX_InterneRef_Hauptdaten_Fall ON Hauptdaten_Fall(InterneRef);
CREATE INDEX IX_IstAktuell_Hauptdaten_Fall ON Hauptdaten_Fall(IstAktuell);
> How many rows are in the table?
# select count(*) from Hauptdaten_Fall ;
count
--------
257530
(1 row)
> How many
> rows actually have IstAktuell=20 (is 177458 a reasonable estimate?).
Yes.
ifsg=# select count(*) from Hauptdaten_Fall WHERE IstAktuell=20;
count
--------
177458
(1 row)
Moreover I tried explain with:
set enable_seqscan = off;
explain SELECT Hauptdaten_Fall.MeldeKategorie, Count(Hauptdaten_Fall.ID) AS Anz FROM Hauptdaten_Fall WHERE (((Hauptdaten_Fall.IstAktuell)=20)) GROUP BY Hauptdaten_Fall.MeldeKategorie ORDER BY Hauptdaten_Fall.MeldeKategorie;
NOTICE: QUERY PLAN:
Aggregate (cost=0.00..146770.97 rows=17746 width=16)
-> Group (cost=0.00..146327.32 rows=177458 width=16)
-> Index Scan using ix_meldekategorie_hauptdaten_fa on hauptdaten_fall (cost=0.00..145883.68 rows=177458 width=16)
I wonder, why the Index IX_IstAktuell_Hauptdaten_Fall for IstAktuell is not
used and moreover why the query takes now 127s with enable_seqscan = off
against 32s with the default setting.
Kind regards
Andreas.
From | Date | Subject | |
---|---|---|---|
Next Message | Tille, Andreas | 2001-09-11 11:59:38 | Re: Performance question |
Previous Message | Ian Linwood | 2001-09-11 11:17:59 | Re: How to make a REALLY FAST db server? |