Welche SQL-Abfrage zeigt mir die Tabellen und Indizes durch einen Blick auf Informix verwendet?

StackOverflow https://stackoverflow.com/questions/307983

  •  08-07-2019
  •  | 
  •  

Frage

Welche SQL-Abfrage zeigt mir die Tabellen und Indizes durch einen Blick auf Informix verwendet?

Ich weiß, wie für einen Blick in SYS_VIEWS die „Original erstellen Aussage“ zu finden, aber das erfordert ein menschliches Gehirn-Scanning / grokking dass wählen. Ich glaube, ich finden kann, wenn die Tabellen indiziert sind, sobald sie identifiziert wurden.

Hintergrund: Ich brauche, um sicherzustellen, dass einige kritische Ansichten zu aktuellen Punkt (zum Beispiel nach „reorganisiert“) mit Tabellen. Zu oft habe ich Blick auf alte Backup-Tabellen zeigen gesehen, die nicht mehr indiziert wurden, und nahm immer abzufragen.

Ich brauche diese Abfragen regelmäßig zu identifizieren und zu „erinnern“, um die Abstimmung DBA die Ansichten / Indizes neu zu erstellen.

War es hilfreich?

Lösung

Die Tabelle sysdepend Dokumente Abhängigkeiten anzuzeigen. Die Säulen sind:

  • btabid - Basistabelle ID-Nummer
  • AkTyp - normalerweise T für Tabelle oder V für Ansicht
  • dtabid - abhängige Tabelle ID-Nummer
  • dtype - normalerweise T für Tabelle oder V für Ansicht

Folglich ist für eine bestimmte Ansicht mit tabid N, können Sie schreiben:

SELECT b.owner, b.tabname, d.*
    FROM "informix".systables b, "informix".sysdepend d
    WHERE d.dtabid = N
      AND d.btabid = b.tabid;

Wenn Sie nur den Namen der Ansicht kennen, dann die Ansicht der tabid Bestimmung ist überraschend heikel, wenn die Datenbank eine MODE ANSI-Datenbank ist, wo man mehrere Tabellen mit demselben Tabellennamen (oder Ansichtsnamen in diesem Fall) haben kann, aber jeder mit einem verschiedene Eigentümer. Jedoch im üblichen Fall (eine nicht-ANSI-Datenbank oder eine eindeutige Tabelle / View-Name), die Abfrage ist einfach genug:

SELECT b.owner, b.tabname, d.*
    FROM "informix".systables b, "informix".sysdepend d
    WHERE d.dtabid = (SELECT v.tabid FROM "informix".systables v
                         WHERE v.tabname = "viewname"
                     )
      AND d.btabid = b.tabid;

Die Frage geht dahin, über die Indizes von einer Ansicht verwendet. Indizes werden nicht von dem Ziel, per se verwendet wird; Indizes werden von dem Abfrage-Engine verwendet wird, wenn eine Abfrage der Verarbeitung, aber die Indizes verwendet werden könnte, abhängig von der Gesamtabfrage ändern - so verschiedenen Indizes könnte für diese beiden Abfragen verwendet werden:

SELECT * FROM SomeView;

SELECT * FROM SomeView
    WHERE Column1 BETWEEN 12 AND 314;

Die Indizes, die verwendet werden, sind überall im Systemkatalog nicht erfasst; sie werden dynamisch neu bestimmt, wenn eine Anweisung vorbereitet wird.

Die Frage stellt außerdem fest:

  

Hintergrund: Ich brauche, um sicherzustellen, dass einige kritische Ansichten zu aktuellen Punkt (zum Beispiel nach „reorganisiert“) mit Tabellen. Zu oft habe ich Ansichten zu sehen alte Backup-Tabellen zeigen, das nicht mehr indiziert wurden, und nahm für immer abgefragt werden.

Wie tun Sie Ihre Reorganisation? Haben Sie eine neue Tabelle mit der gewünschten Struktur erstellen, die Daten von alten zu neuen kopieren, dann alt umbenennen umbenennen neu? Das wäre wahrscheinlich die Erklärung - die Tabelle Umbenennung reworks die Ansichten, die die Tabelle verweisen. Welche Form der Reorganisation machst du da? Können Sie eine andere Technik verwenden? Eine klassische Stand-by ist ALTER INDEX Indexname TO CLUSTER (nach Änderung es nicht cluster, wenn es bereits gruppierten wurde) zu verwenden. Dies erstellt die Tabelle und die Indizes - ohne den Blick zu brechen. Alternativ können Sie eine ALTE FRAGMENT Operation in Betracht ziehen.

Es scheint auch ein wenig seltsam um die alten Tabellen zu halten. Das deutet darauf hin, dass Ihre Reorganisation ist eher eine Frage der alten Daten fallen. Vielleicht sollten Sie Ihren Tisch mit Datumsbereiche fragmentieren, so dass Sie ein Fragment lösen, wenn es seine ‚Ende der Nutzungsdauer‘ Datum erreicht hat. Fallenlassen der Tabellen würde auch die Ansichten fallen, die davon abhängen, um sicherzustellen, dass Sie die Ansichten mit den neuen Tabellennamen wieder aufzubauen.

Eine weitere Alternative ist daher einfach sicherzustellen, dass die Reorganisation fällt und stellt die Aussicht.

  

Ich brauche diese Abfragen regelmäßig zu identifizieren und zu „erinnern“, um die Abstimmung DBA die Ansichten / Indizes neu zu erstellen.

Worrisome ... es sollte nur ein Teil des Standardverfahrens, die Reorganisation für den Abschluss. Grundsätzlich haben Sie einen Fehler in diesem Verfahren zu berichten - es stellt nicht sicher, dass die Ansichten sind voll funktionsfähig

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top