JetIntersectIndexes-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetIntersectIndexes-Funktion

Die JetIntersectIndexes -Funktion berechnet die Schnittmenge zwischen mehreren Sätzen von Indexeinträgen aus anderen sekundären Indizes in derselben Tabelle. Dieser Vorgang eignet sich für die Suche nach dem Satz von Datensätzen in einer Tabelle, die mindestens zwei Kriterien erfüllen, die Indexbereiche ausgedrückt werden kann.

JET_ERR JET_API JetIntersectIndexes(
  __in          JET_SESID sesid,
  __in          JET_INDEXRANGE* rgindexrange,
  __in          unsigned long cindexrange,
  __in_out      JET_RECORDLIST* precordlist,
  __in          JET_GRBIT grbit
);

Parameter

sesid

Die Sitzung für diesen Aufruf verwenden.

rgindexrange

Ein Zeiger auf ein Array von JET_IndexRange -Strukturen. Jede Struktur enthält ein JET_TABLEID , das zum Speichern eines Indexbereiche werden eingerichtet wurde. Weitere Informationen finden Sie unter JET_IndexRange.

cindexrange

Die Anzahl von JET_IndexRange -Strukturen im Array, das in der Rgindexrange -Parameter enthalten ist.

precordlist

Zeiger auf eine JET_RECORDLIST -Struktur. Diese Struktur wird aufgefüllt mit ausreichend Informationen, um die temporäre Tabelle mit den Ergebnissen von JetIntersectIndexesdurchlaufen.

Der Ausgabepuffer, der eine JET_RECORDLIST -Struktur erhält. Die Struktur enthält eine Beschreibung des Resultsets der Kreuzung.

JET_errInvalidGrbit

Für die zukünftige Verwendung reserviert.

Return Value

Diese Funktion gibt den Datentyp der JET_ERR mit einem der folgenden Rückgabecodes. Weitere Informationen zu ESE-Fehlern finden Sie unter Extensible Storage Engine-Fehler und Fehler behandeln Parameter.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errClientRequestToStopJetService

Es ist nicht möglich, um den Vorgang abzuschließen, da alle Aktivitäten in der Instanz dieser Sitzung aufgrund eines Aufrufs von JetStopServiceeingestellt hat.

JET_errInstanceUnavailable

Es ist nicht möglich, um den Vorgang abzuschließen, da die Sitzung zugeordnete Instanz ein schwerwiegender Fehler, der erfordert aufgetreten ist, dass der Zugriff auf alle Daten gesperrt werden, um die Integrität der Daten zu schützen.

Windows XP:  Dieser Rückgabewert wird in Windows XP eingeführt.

JET_errInvalidgrbit

Eine der angeforderten Optionen ungültig falsch verwendet oder nicht implementiert.

Dieser Fehler wird zurückgegeben, indem Sie JetIntersectIndexes bei:

Die JET_errInvalidGrbit in der JET_IndexRange -Struktur, auf die jedes Element im Array Rgindexrange enthalten ist nicht gleich JET_bitRecordInIndex.

JET_errInvalidParameter

Eine der bereitgestellten Parameter enthält einen unerwarteten Wert oder ein Wert, der in Kombination mit dem Wert eines anderen Parameters inkonsistent ist.

Dieser Fehler wird durch JetIntersectIndexes für aus folgenden Gründen zurückgegeben:

  • Der Precordlist -Parameter ist NULL.

  • Der CbStruct -Member der JET_RECORDLIST -Struktur im Precordlist -Parameter angegebene ist nicht gleich der Größe der JET_RECORDLIST -Struktur.

  • Der Cindexrange -Parameter ist 0 (null).

  • Der Parameter Cindexrange ist größer als 64.

  • Das CbStruct -Element für jedes Element im Array durch den Rgindexrange -Parameter angegebene ist nicht gleich der Größe der JET_IndexRange -Struktur.

  • Die Elemente im Array Rgindexrange enthalten JET_TABLEIDs aus verschiedenen Tabellen.

  • Ein Element im Rgindexrange -Array enthält eine JET_TABLEID , die nicht auf einen sekundären Index positioniert ist.

  • Mindestens eines der Elemente im Array Rgindexrange enthalten JET_TABLEIDs auf den gleichen sekundären Index positioniert.

JET_errInvalidSesid

Das Sitzungshandle ist ungültig oder verweist auf eine geschlossene Sitzung.

Dieser Fehler wird nicht unter allen Umständen zurückgegeben. Ziehpunkte werden auf einer best Effort-Basis überprüft.

JET_errNotInitialized

Es ist nicht möglich, um den Vorgang abzuschließen, da die Instanz dieser Sitzung nicht initialisiert wurde.

JET_errOutOfCursors

Der Vorgang ist fehlgeschlagen, da das Modul die erforderlichen Ressourcen für einen neuen Cursor Öffnen nicht zugeordnet werden konnte. Cursor-Ressourcen werden durch Aufrufen der JetSetSystemParameter mit JET_paramMaxCursors im Paramid -Parameter angegebene konfiguriert.

JET_errOutOfMemory

Der Vorgang ist fehlgeschlagen, weil nicht genügend Speicher zugewiesen werden konnte, um sie durchzuführen.

JetIntersectIndexes können JET_errOutOfMemory zurück, wenn der Adressbereich des Hostprozesses zu stark fragmentiert wird. Der temporäre Tabellenmanager wird immer ein Stück 1 MB Adressraum für jeden unabhängig von der Menge der zu speichernden Daten erstellte temporäre Tabelle zugewiesen. JetIntersectIndexes erstellt eine temporäre Tabelle für jedes JET_IndexRange in der Rgindexrange -Parameter angegeben und eine temporäre Tabelle für die Ausgabe im JET_RECORDLIST.

JET_errRestoreInProgress

Es ist nicht möglich, um den Vorgang abzuschließen, da ein Wiederherstellungsvorgang ausgeführt auf die Instanz der Sitzung zugeordnet wird.

JET_errSessionSharingViolation

Es ist nicht zulässig, dieselbe Sitzung von mehr als einem Thread gleichzeitig verwenden.

Windows XP:  Dieser Rückgabewert wird in Windows XP eingeführt.

JET_errTermInProgress

Es ist nicht möglich, um den Vorgang abzuschließen, da die Sitzung zugeordnete Instanz heruntergefahren wird.

JET_errTooManyOpenIndexes

Der Vorgang ist fehlgeschlagen, da das Modul nicht die erforderlichen Ressourcen für die Indizes der Tabelle cache reserviert werden konnte. Die Anzahl der Indizes, deren Schema zwischengespeichert werden kann, wird mithilfe von JetSetSystemParameter mit JET_paramMaxOpenTables im Paramid -Parameter angegebene konfiguriert.

JET_errTooManyOpenTables

Der Vorgang ist fehlgeschlagen, da das Modul die erforderlichen Ressourcen für das Schema der Tabelle Zwischenspeichern nicht zugeordnet werden konnte. Die Anzahl der Tabellen, deren Schema zwischengespeichert werden kann, wird mithilfe von JetSetSystemParameter mit JET_paramMaxOpenTables im Paramid -Parameter angegebene konfiguriert.

JET_errTooManySorts

Der Vorgang ist fehlgeschlagen, da das Modul zum Erstellen einer temporären Tabelle erforderlichen Ressourcen nicht zugeordnet werden konnte. Temporäre Tabelle Ressourcen werden mithilfe von JetSetSystemParameter mit JET_paramMaxTemporaryTables im Paramid -Parameter angegebene konfiguriert.

Bei Erfolg wird eine neue temporäre Tabelle zurückgegeben, die die Textmarken Datensätze enthält, die die Kriterien von jeweils der Eingabeindex Bereich Beschreibungen dargestellt.

Bei einem Fehler wird die temporäre Tabelle mit den Ergebnissen nicht erstellt werden. Der Zustand der temporären Datenbank kann geändert werden. Der Zustand der normalen Datenbanken von der Datenbank-Engine verwendet, bleiben unverändert. Die aktuelle Position der s JET_TABLEIDbereitgestellt, um diese Funktion möglicherweise geändert werden.

Anmerkungen

JetIntersectIndexes kann zum effizienten filtern Sie die Datensätze in einer Tabelle anhand mehrerer Kriterien verwendet werden, wenn diese Kriterien in Bezug auf die sekundären Indizes in dieser Tabelle ausgedrückt werden können. Betrachten Sie beispielsweise, dass Sie eine sehr große Tabelle, enthält Personen haben. In der Tabelle kann Spalten für ihre Benutzer-Id, Vorname, letzten Namen usw. enthalten. Nehmen wir an, die dieser Spalten einzeln indiziert ist und der primäre Index der Tabelle über die Benutzer-Id ist. Wollte man alle, deren Vorname mit einem A und deren Nachname mit beginnt G, finden, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie einen neuen Cursor auf die Tabelle, und legen Sie diesen Cursor über die Spalte "Vorname" den Index verwendet. Anschließend setup ein Indexbereich für alle Personen, deren "First Name" mit "A" gestartet, und erstellt eine JET_IndexRange -Struktur, die dieser Cursor enthält.

  2. Wiederholen Sie Schritt 1 mit einem neuen Cursor auf dem "Nachname" Index für alle Personen, deren "last Name" mit "G" gestartet.

  3. Übergeben Sie diese Kriterien an JetIntersectIndexes , um das Ergebnis in eine temporäre Tabelle zu berechnen.

  4. Durchsuchen Sie die temporäre Tabelle und rufen Sie aller Datensätze, die die Kriterien als Lesezeichen zu übergeben ab.

Die temporäre Tabelle, enthält die Ergebnismenge ist eine einfache Tabelle mit einer Spalte, die die Textmarke der einzelnen Datensätze enthält, die alle Kriterien, die zum Berechnen der übergeben. Das Resultset wird in derselben Reihenfolge wie die primären Index sortiert und enthält keine doppelten Einträge. Die Anwendung kann Auflisten der Ergebnisse der Kreuzung durch Auflisten der Zeilen in der temporären Tabelle abrufen die Textmarke für jedes Ergebnis mit JetRetrieveColumnund besuchen dann den Datensatz in der Datenbank durch Aufrufen der JetGotoBookmark mit diesem Lesezeichen für einen Cursor auf der Primärindex positioniert.

Die temporäre Tabelle, die von JetIntersectIndexes zurückgegebenen kann nur in Vorwärtsrichtung gescannt werden. Es sollte auch über JetCloseTable geschlossen werden, wenn der Scan abgeschlossen ist. Weitere Informationen zu temporären Tabellen und ihrer Funktionsweise finden Sie unter JetOpenTemporaryTable.

JetIntersectIndexes ist im Allgemeinen eine effiziente und bequeme Methode zum Filtern von Datensätzen anhand mehrerer Kriterien indizierte. Es gibt jedoch einige wichtige Tipps, die befolgt werden sollten, um die Nützlichkeit dieser Funktion zu maximieren. Wenn Sie wissen, dass eines der Kriterien so restriktiv ist, dass der resultierende Indexbereich sehr wenige Datensätze ist wahrscheinlich besser, einfach dieses Indexbereichs durchlaufen und die Datensätze auf der Anwendungsebene. Weiter, wenn Sie wissen, dass Sie ausgewählt haben, die sehr viel weniger restriktiv als andere Kriterien in der Schnittmenge auftreten, sollten Sie löschen diese viel weniger restriktiven Kriterien aus der Schnittmenge. Schließlich bekannt ist, dass eines der Kriterien überhaupt nicht restriktiv ist, sodass der resultierende Indexbereich fast so groß wie der Primärindex ist dann ist es unwahrscheinlich, dass mit diesem Indexbereich schneiden profitieren (die Größe reduzieren) der Ergebnismenge. In allen Fällen sollten Sie Kriterien in einer Weise zu markieren, die am spezifischsten Satz von Lesezeichen bei der Ausgabe für eine optimale Leistung und nehmen die wenigsten möglichen Einträge bei der Eingabe.

Voraussetzungen

-Client,

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

Erfordert WindowsServer 2008, WindowsServer 2003 oder Windows 2000 Server.

Kopfzeile

In Esent.h deklariert.

Library

Verwenden Sie ESENT.lib.

DLL

"ESENT.dll" erfordert.

Siehe auch

JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_IndexRange
JET_RECORDLIST
JetGotoBookmark
JetRetrieveColumn
JetSetIndexRange