[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    - CTEs haben mit temp Tabellen nichts gemeinsam, das ist nur eine alternative Schreibweise.
    - wenn man denselben CTE öfter benötigt, dann sollte man das als View hinterlegen.
    - für SQL gilt (eigentlich) das Kohl Prinzip: entscheidend ist, was hinten rauskommt. Wenn unterschiedliche Formulierungen derselben Ergebnismenge zu verschiedenen Laufzeiten führen, dann schwächelt der Optimizer.
    - einigen gängigen Schwächeanfällen (wie das Query Engin heißt, ist mir grundzipiell Wurscht!!!) kann man mit Temp Tabellen entgegenwirken, weil man so Selektivität vorziehen kann (erst Exttrakte ziehen, dann joinen).

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  2. #2
    Registriert seit
    Apr 2005
    Beiträge
    385
    Hallo,

    ich habe die Abfrage 1x als CTE und 1x als CREATE TABLE ... with DATA gemacht.
    Da mehrfach auf das ResultSet der Abfrage zugegriffen wird, habe ich merklich festgestellt, das die temp. Table wesentlich performanter ist.
    Keine AHnung warum und ich habe auch groß keine Analysen gemacht, nur die Laufzeit war merklich kürzer mit der richtigen temp. Tabelle in der QTEMP....

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wie schon beschrieben, CTE's sind alternative Schreibweisen.
    Was macht SQL eigentlich?
    Da alle nur mit Wasser kochen, i.W. nichts anderes als ein Programmierer auch.
    Der Programmierer überlegt sich vorher seine Zugriffe (LF's) bevor er loslegt. Anschließend werden die Zugriffe von links nach rechts vorgenommen.
    Dabei wird links 1 Satz gelesen und nach rechts die passenden Daten je Join ermittelt, wobei dieser Join über Index am Besten ist um die Zugriffe zu reduzieren.
    Die Schwierigkeit besteht halt, die Beziehung und die Where-Klausel unter einen Hut zu bringen.
    Der Optimizer kann halt nur versuchen, das beste herauszuholen.

    CTE's verkürzen nur die Schreibweise aber sparen nicht die Zugriffe!

    Was temporäre Tabellen in QTEMP angeht so kann man hier noch mal mit Indizes beschleunigen.
    Das Schöne an SQL:
    DROP TABLE löscht automatisch auch alle Indizes!

    Und wer mit Transaktionen arbeitet:
    Hier kann man kurzfristig mit "Set Transaction" die Transaktion aussetzen bzw. bei einigen Befehlen (Update/Insert/Delete) "WITH NC" für QTEMP-Tabellen anwenden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wie schon beschrieben, CTE's sind alternative Schreibweisen.
    Was macht SQL eigentlich?
    Da alle nur mit Wasser kochen, i.W. nichts anderes als ein Programmierer auch.
    Der Programmierer überlegt sich vorher seine Zugriffe (LF's) bevor er loslegt. Anschließend werden die Zugriffe von links nach rechts vorgenommen.
    Dabei wird links 1 Satz gelesen und nach rechts die passenden Daten je Join ermittelt, wobei dieser Join über Index am Besten ist um die Zugriffe zu reduzieren.
    Die Schwierigkeit besteht halt, die Beziehung und die Where-Klausel unter einen Hut zu bringen.
    Der Optimizer kann halt nur versuchen, das beste herauszuholen.

    CTE's verkürzen nur die Schreibweise aber sparen nicht die Zugriffe!

    Was temporäre Tabellen in QTEMP angeht so kann man hier noch mal mit Indizes beschleunigen.
    Das Schöne an SQL:
    DROP TABLE löscht automatisch auch alle Indizes!

    Und wer mit Transaktionen arbeitet:
    Hier kann man kurzfristig mit "Set Transaction" die Transaktion aussetzen bzw. bei einigen Befehlen (Update/Insert/Delete) "WITH NC" für QTEMP-Tabellen anwenden.
    ... was Einfluss hat ist:
    - ob ein Cursur read only ist
    - scrollable oder nicht
    Indexe auf Temp tables braucht man eigentlich kaum noch (wenn es einen braucht, macht es sich einen und cached den)
    @commit: Da muss man beachten, dass set connection nur an einer Transaktionsgrenze geht und die with Klausel kein SQL Standard ist. Besser und einfacher ist da, die Temp Tabellen in einer eigenen ACTGRP (und damit eigenem SRVPGM) zu verarbeiten, dann kann man diese Connection mit Isolation level no commit verarbeiten (CRTSQLRPGI COMMIT(*NONE))

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. V7R1 Fehler Umwandlung SQLRPGLE
    By Peet in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 07:54
  2. SQLRPGLE und offene Dateien
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 16-06-14, 09:30
  3. SQLRPGLE Problem mit SQL Communication Area
    By ExAzubi in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 09-03-14, 15:41
  4. SQL Abfrage Problem
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-10-01, 14:24
  5. Compilierung SQLRPGLE
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-10-01, 17:31

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •