Hallo,
macht es einen Unterschied, ob ich von einer "Vater-Tabelle", oder direkt in der Geerbten lösche?
Szenario:
Tabelle1: id (primary key), feld1, feld2, feld3
Tabelle2: id (geerbt, primary key), feld1 (geerbt)..., feld4, feld5 INHERITS Tabelle1
Jetzt möchte ich den Satz mit id=x löschen. Natürlich nicht nur einen, sonder ein paar 10tausend.
Macht es einen Unterschied, ob ich
DELETE FROM Tabelle1 WHERE id=x
nehme, oder, wenn ich weiss, dass es in Tabelle2 steht
DELETE FROM Tabelle2 WHERE id=x
?
Gruß
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
EXPLAIN bringt für SET constraint_exclusion = off/on; genau das gleiche Ergebnis. Der DELETE direkt im "Vater" bringt mir den Vorteil, dass ich nicht erst die "Sohn" Tabelle ermitteln muss. (Im Echtfall gibt es mehr als eine .) Die (Sohn-)Tabelle, in der die zu löschende Zeile steht könnte ich zwar ermitteln, aber wenn der Geschwindigkeitsvorteil nicht enorm ist spare ich mir den Aufwand.
Also, die Pläne sollten schon unterschiedlich sein:
Aber die Ermittlung der passenden Sohn-Tabelle sollte im Vergleich zur Gesamtarbeit verschwindend gering sein. Nach dem, was man so üblicherweise in Mailinglisten etc. sieht und hört, gilt das durchaus auch für eine 3-stellige Anzahl von Kindtabellen, mit mehr wird es dann u.U. anders. Vermutlich wäre dies dann ein Fall für ads.Code:test=*# \d+ master Table "public.master" Column | Type | Modifiers | Storage | Description --------+---------+-----------+---------+------------- i | integer | | plain | Child tables: s1, s2, s3 Has OIDs: no test=*# \d s1; Table "public.s1" Column | Type | Modifiers --------+---------+----------- i | integer | Check constraints: "s1_i_check" CHECK (i >= 1 AND i <= 10) Inherits: master test=*# \d s2; Table "public.s2" Column | Type | Modifiers --------+---------+----------- i | integer | Check constraints: "s2_i_check" CHECK (i >= 11 AND i <= 20) Inherits: master test=*# \d s3; Table "public.s3" Column | Type | Modifiers --------+---------+----------- i | integer | Check constraints: "s3_i_check" CHECK (i >= 21 AND i <= 30) Inherits: master test=*# explain delete from master where i = 13; QUERY PLAN ----------------------------------------------------------------- Delete on master (cost=0.00..40.00 rows=13 width=6) -> Seq Scan on master (cost=0.00..0.00 rows=1 width=6) Filter: (i = 13) -> Seq Scan on s2 master (cost=0.00..40.00 rows=12 width=6) Filter: (i = 13) (5 rows) Time: 0,492 ms test=*# explain delete from s2 where i = 13; QUERY PLAN ---------------------------------------------------------- Delete on s2 (cost=0.00..40.00 rows=12 width=6) -> Seq Scan on s2 (cost=0.00..40.00 rows=12 width=6) Filter: (i = 13) (3 rows) Time: 0,335 ms test=*#
Beim Einfügen von Daten könnte es aber durchaus sinnvoll sein, es gleich in die 'richtige' zu schieben und nicht erst TRIGGER zu durchlaufen.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Vielen Dank!
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen