Die Entdeckungsreise von PostgreSQL
Postgres verfügt über mehrere Indextypen und jede neue Version scheint einige neue hinzuzufügen. Jeder Indextyp ist nützlich, aber welcher Typ verwendet werden soll, hängt von (1) der Art der Daten und manchmal (2) den zugrunde liegenden Daten in der Tabelle und (3) der Art der durchgeführten Suche ab. Im folgenden Inhalt stellen wir die Indextypen vor, die Sie in Postgres verwenden können, und zeigen, wann Sie welchen Indextyp verwenden sollten. Bevor wir beginnen, finden Sie hier eine Liste der Indextypen, durch die wir Sie führen:
B-Baum
Generalisierter invertierter Index (GIN)
Generalisierter invertierter Suchbaum (GiST)
Raumpartitioniertes GiST (SP-GiST)
Blockbereichsindex (BRIN)
Hash
Beginnen wir nun mit der Indizierung.
Wenn Sie einen Abschluss in Informatik haben, ist die B-Tree-Indizierung möglicherweise der erste Index, den Sie lernen. B-Tree-Indizes erstellen einen Baum, der immer sein Gleichgewicht behält. Wenn es anhand des Index nach etwas sucht, durchsucht es den Baum, um den Schlüssel zu finden, und gibt die gesuchten Daten zurück. Die Verwendung eines Index ist erheblich schneller als ein sequenzieller Scan, da nur wenige Seiten gelesen werden müssen (wenn Sie nur wenige Datensätze zurückgeben), im Gegensatz zum sequenziellen Scannen von Tausenden von Datensätzen.
Wenn Sie eine standardmäßige CREATE INDEX-Anweisung ausführen, wird ein B-Tree-Index für Sie erstellt. B-Tree-Indizes sind für die meisten Datentypen wertvoll, z. B. Text, Zahlen und Zeitstempel. Wenn Sie mit der Verwendung von Indizes in Ihrer Datenbank noch nicht vertraut sind und nicht zu viele der erweiterten Funktionen von Postgres in Ihrer Datenbank verwenden, ist die Verwendung eines Standard-B-Tree-Index wahrscheinlich die beste Option.
GIN-Index für mehrwertige SpaltenDer verallgemeinerte invertierte Index, allgemein GIN genannt, eignet sich hauptsächlich für Datentypen, bei denen eine einzelne Spalte mehrere Werte enthält.
Laut Postgres-Dokumentation:
„GIN ist für die Handhabung von Situationen konzipiert, in denen der indizierte Eintrag ein zusammengesetzter Wert ist und die vom Index verarbeitete Abfrage nach einem Wert suchen muss, der im zusammengesetzten Eintrag vorkommt. Dieser Eintrag könnte beispielsweise ein Dokument sein und der Die Abfrage kann nach bestimmten Zeichen suchen, die im Dokument enthalten sind.“
Die häufigsten Datentypen in diesem Bereich sind:
hStore
Array
Reichweite
JSONB
Einer der befriedigendsten Aspekte von GIN-Indizes ist ihre Fähigkeit, in zusammengesetzten Werten gespeicherte Daten zu verstehen. Da ein GIN-Index jedoch spezifische Kenntnisse der Datenstruktur für jeden einzelnen hinzugefügten Typ erfordert, werden nicht alle Datentypen vom GIN-Index unterstützt.
Der Generalized Inverted Search Tree (GiST)-Index eignet sich vor allem dann, wenn sich Ihre Daten mit anderen Datenzeilen in derselben Spalte überschneiden. GiST-Indizes lassen sich am besten nutzen, wenn Sie einen Geometriedatentyp deklarieren und wissen möchten, ob zwei Polygone einige Punkte enthalten. In einem Fall kann ein bestimmter Punkt in einer Box enthalten sein, während andere Punkte gleichzeitig nur in einem Polygon existieren. Gängige mit GiST indizierte Datentypen sind:
Geometrietyp
Texttypen, die eine Volltextsuche erfordern
Es gibt viele feste Grenzen für die Größe von GiST-Indizes, andernfalls können GiST-Indizes extrem groß werden. Aus diesem Grund sind GiST-Indizes verlustbehaftet (ungenau).
Laut offizieller Dokumentation:
„GiST-Indizes sind verlustbehaftet, was bedeutet, dass der Index falsche Übereinstimmungen erzeugen kann. Daher ist es notwendig, die echten Tabellenzeilen zu überprüfen, um falsche Übereinstimmungen zu beseitigen (PostgreSQL führt diese Aktion bei Bedarf automatisch aus)“
Das bedeutet nicht, dass Sie ein falsches Ergebnis erhalten, es bedeutet lediglich, dass Postgres einen kleinen zusätzlichen Aufwand leistet, um diese falschen Ergebnisse herauszufiltern, bevor es die Daten an Sie zurücksendet.
Besonderer Tipp: GIN- und GiST-Indizes können häufig für denselben Datentyp verwendet werden. Normalerweise hat man eine gute Leistung, nimmt aber viel Speicherplatz ein und umgekehrt. Wenn es um GIN vs. GiST geht, gibt es keine einheitliche Lösung, die in jeder Situation funktioniert, aber die oben genannten Regeln sollten für die meisten gängigen Situationen gelten.
SP-GiST-Index für größere DatenmengenDer räumlich partitionierte GiST-Index (SP-GiST) übernimmt den räumlich partitionierten Baum von Purdue Research. SP-GiST-Indizes werden häufig verwendet, wenn Ihre Daten einen natürlichen Clusterfaktor aufweisen und kein ausgeglichener Baum sind. Telefonnummern sind ein gutes Beispiel (zumindest US-Telefonnummern). Sie haben das folgende Format:
3-stellige Vorwahl
3-stellige Vorwahlnummer (bezogen auf alte Telefonzentralen)
4-stellige Zeilennummer
Dies bedeutet, dass es einen natürlichen Clusterfaktor bei den ersten drei Ziffern des ersten Satzes gibt, gefolgt vom zweiten Satz aus drei Ziffern, und dann sind die Zahlen gleichmäßig verteilt. Allerdings gibt es in einigen Vorwahlen von Telefonnummern einen höheren Sättigungszustand als in anderen. Das Ergebnis kann ein sehr unausgeglichener Baum sein. Da es im Vorfeld einen natürlichen Aggregationsfaktor gibt und die Daten nicht gleichmäßig verteilt sind, könnten Daten wie Telefonnummern ein guter Fall für SP-GiST sein.
Block Range Indexes (BRIN) konzentrieren sich auf bestimmte Situationen wie SP-GiST. Sie werden am besten verwendet, wenn die Daten eine natürliche Reihenfolge haben und die Datengröße oft groß ist. Wenn Sie eine Milliarde Datensätze in chronologischer Reihenfolge haben, kann BRIN nützlich sein. Wenn Sie einen großen Datensatz abfragen, der natürlich gruppiert ist, beispielsweise mehrere Postleitzahlen, kann BRIN Ihnen dabei helfen, sicherzustellen, dass ähnliche Postleitzahlen an nahe beieinander liegenden Orten auf der Festplatte gespeichert werden.
Wenn Sie eine sehr große Datenbank haben, die nach Datum oder Postleitzahl sortiert ist, können Sie mit dem BRIN-Index einige unnötige Daten sehr schnell überspringen oder ausschließen. Darüber hinaus sind BRIN-Indizes im Vergleich zur Gesamtdatengröße relativ klein, sodass BRIN-Indizes bei einem großen Datensatz eine bessere Leistung erzielen können.
Hash-Index, endlich keine Angst mehr vor einem AbsturzHash-Indizes gibt es in Postgres schon seit Jahren. Bis zur Veröffentlichung von Postgres 10 gab es jedoch einen großen Vorbehalt hinsichtlich ihrer Verwendung: Sie waren nicht WAL-protokolliert. Das heißt, wenn Ihr Server abstürzt und Sie z. B. mit wal-g kein Failover auf einen Standby-Server oder eine Wiederherstellung aus einem Archiv durchführen können, verlieren Sie diesen Index, bis Sie ihn neu erstellen. Mit der Veröffentlichung von Postgres 10 sind sie jetzt WAL-protokolliert, sodass Sie darüber nachdenken können, sie wieder zu verwenden, aber die eigentliche Frage ist: Sollten Sie das tun?
Hash-Indizes bieten manchmal schnellere Suchvorgänge als B-Tree-Indizes und lassen sich auch schnell erstellen. Das größte Problem besteht darin, dass sie nur auf „Gleichheits“-Vergleichsoperationen beschränkt sind, sodass Sie sie nur für die Suche nach exakten Übereinstimmungen verwenden können. Dadurch sind Hash-Indizes deutlich weniger flexibel als häufig verwendete B-Tree-Indizes, und Sie sollten sie nicht als Ersatz, sondern als Index für Sonderfälle betrachten.Welches sollten Sie verwenden? Wir haben gerade viel vorgestellt. Wenn Sie ein wenig Angst haben, ist das normal. Wenn Sie das bereits wissen, erstellt CREATE INDEX immer einen Index für Sie mithilfe eines B-Baums, und die gute Nachricht ist, dass Postgres für die meisten Datenbanken eine sehr gute oder sehr gute Leistung erbringt. :) Wenn Sie erwägen, weitere Postgres-Funktionen zu verwenden, finden Sie hier eine Cheat-Liste, wenn Sie andere Postgres-Indextypen verwenden:
B-Tree – geeignet für die meisten Datentypen und Abfragen
GIN – für JSONB/hstore/arrays
GiST – für Volltextsuche und geometrische Datentypen
SP-GiST – geeignet für große Datensätze mit natürlichen Aggregationsfaktoren, aber ungleichmäßiger Verteilung
BRIN – geeignet für wirklich große Datensätze mit sequentieller Anordnung
Hash – gut für Gleichheitsoperationen, aber normalerweise ist immer noch ein B-Tree-Index alles, was Sie brauchen.
Wenn Sie Fragen oder Feedback zu diesem Artikel haben, können Sie sich gerne unserem Slack-Kanal anschließen.
Das obige ist der detaillierte Inhalt vonDie Entdeckungsreise von PostgreSQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

Der Server verfügt nicht über die Berechtigung, auf die angeforderte Ressource zuzugreifen, was zu einem NGINX 403 -Fehler führt. Zu den Lösungen gehören: Überprüfung der Dateiberechtigungen. Überprüfen Sie die Konfiguration .htaccess. Überprüfen Sie die Nginx -Konfiguration. Konfigurieren Sie Selinux -Berechtigungen. Überprüfen Sie die Firewall -Regeln. Fehlerbehebung bei anderen Ursachen wie Browserproblemen, Serverausfällen oder anderen möglichen Fehlern.

Wie fixiere ich Nginx 403 Verbotener Fehler? Überprüfen Sie die Datei- oder Verzeichnisberechtigungen; 2.Htaccess -Datei prüfen; 3. Überprüfen Sie die Konfigurationsdatei der Nginx; 4. Starten Sie Nginx neu. Weitere mögliche Ursachen sind Firewall -Regeln, Selinux -Einstellungen oder Anwendungsprobleme.

Antwort auf die Frage: 304 Nicht geänderter Fehler gibt an, dass der Browser die neueste Ressourcenversion der Client -Anfrage zwischengespeichert hat. Lösung: 1. Löschen Sie den Browser -Cache; 2. Deaktivieren Sie den Browser -Cache; 3. Konfigurieren Sie Nginx, um den Client -Cache zu ermöglichen. 4. Überprüfen Sie die Dateiberechtigungen; 5. Datei Hash prüfen; 6. Deaktivieren Sie CDN oder Reverse Proxy -Cache; 7. Starten Sie Nginx neu.

Verwenden Sie unter Linux den folgenden Befehl, um zu überprüfen, ob Nginx gestartet wird: SystemCTL -Status Nginx Richter basierend auf der Befehlsausgabe: Wenn "aktiv: aktiv (lief) angezeigt wird, wird Nginx gestartet. Wenn "Active: Inactive (Dead)" angezeigt wird, wird Nginx gestoppt.

Das Fehlerprotokoll befindet sich in/var/log/nginx (Linux) oder/usr/local/var/log/nginx (macOS). Verwenden Sie die Befehlszeile, um die Schritte zu beseitigen: 1. Sicherung des ursprünglichen Protokolls; 2. Erstellen Sie eine leere Datei als neues Protokoll; 3. Starten Sie den Nginx -Dienst neu. Die automatische Reinigung kann auch mit Tools von Drittanbietern wie lehnte oder konfiguriertem verwendet werden.
