Partielle Indizes
Verwenden Sie Teilindizes, um Indizes zu erstellen, die eine Teilmenge der Dokumente der Datenbank verwenden. Dies ist eine leistungsstarke Optimierungstechnik, wenn sie richtig eingesetzt wird: Sie reduziert die Gesamtgröße eines Indexes, wodurch Abfragen schneller werden und die Kosten für die Datenspeicherung sinken.
Partiellen Index erstellen
IBM Cloudant Query unterstützt partielle Indizes mithilfe des Felds partial_filter_selector. Die Website partial_filter_selector enthält eine Standardabfrage ( IBM Cloudant ), die zur Indexzeit ausgeführt wird.
Dokumente, die nicht mit dem Selektor übereinstimmen, werden nicht in den Index aufgenommen.
Beispielabfrage:
{
"selector": {
"status": {
"$ne": "archived"
},
"type": "user"
}
}
Ohne einen partiellen Index erfordert diese Abfrage eine vollständige Indexsuche, um alle Dokumente mit type:user zu ermitteln, die nicht den Status archived haben. Diese Situation kommt vor, weil ein normaler
Index zum Abgleich zusammenhängender Zeilen verwendet werden kann und der Operator $ne dies nicht garantieren kann.
Um die Antwortzeit zu verbessern, können Sie einen Index erstellen, der die Dokumente mit status: { $ne: archived } zur Indexzeit ausschließt, indem Sie
partial_filter_selector wie im folgenden Beispiel gezeigt:
POST /db/_index HTTP/1.1
Content-Type: application/json
Content-Length: 144
Host: localhost:5984
{
"index": {
"partial_filter_selector": {
"status": {
"$ne": "archived"
}
},
"fields": ["type"]
},
"ddoc" : "type-not-archived",
"type" : "json"
}
Partielle Indizes werden vom Abfrageplaner nicht verwendet, es sei denn, sie werden durch ein use_index Feld angegeben werden, also müssen Sie die ursprüngliche Abfrage ändern:
{
"selector": {
"status": {
"$ne": "archived"
},
"type": "user"
},
"use_index": "type-not-archived"
}
Technisch gesehen müssen Sie den Filter für das Feld status nicht in den Abfrageselektor einschließen. Der partielle Index stellt sicher, dass dieser Wert immer 'true' ist. Wenn Sie den Filter jedoch angeben, macht dies die Absicht
des Selektors deutlicher. Darüber hinaus vereinfacht dies die Nutzung zukünftiger Verbesserungen an der Abfrageplanung (z. B. die automatische Auswahl partieller Indizes).