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:
|
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:
Ö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.
Wiederholen Sie Schritt 1 mit einem neuen Cursor auf dem "Nachname" Index für alle Personen, deren "last Name" mit "G" gestartet.
Übergeben Sie diese Kriterien an JetIntersectIndexes , um das Ergebnis in eine temporäre Tabelle zu berechnen.
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