2017-10-23 2 views
0

Ich habe eine Tabelle in PostgreSQL-Datenbank in folgendem Format ein:Wie priorisieren Tabellen bei der Suche nach Daten in PostgreSQL?

GeneTable 
Id GeneSymbol GeneName 

Ich verwende die folgende Abfrage auf dem Tisch:

SELECT DISTINCT * FROM GeneTable WHERE GeneSymbol LIKE 'ACR' OR GeneName LIKE 'ACR'; 

Ich möchte zunächst die GeneSymbol Spalte der Suche priorisieren seit Es gibt eine höhere Wahrscheinlichkeit, dass die ACR-Entität in der Spalte "GeneSymbol" gefunden wird, was theoretisch dazu beiträgt, die Ausführungszeit zu verkürzen. Gibt es einen Weg dazu?

Vielen Dank im Voraus!

+1

Warum verwenden Sie 'LIKE' wenn Sie übergeben kein Muster? Geht mir auf die Nerven. – GurV

+0

Sorry, der Titel sollte lauten "Wie priorisiert man die Spaltensuche in einer PostgreSQL-Tabelle?" –

+0

PostgreSQL sollte das hoffentlich für Sie tun, die Tabellenstatistiken verwenden. Siehe 'EXPLAIN (VERBOSE, ANALYZE) SELECT ...' für Details und auch die Tabellenstatistiken (siehe das pg-Handbuch). –

Antwort

0

Der Abfrageoptimierer kümmert sich darum. Er schätzt die Selektivität jedes Ausdrucks und wählt die geeignete Verknüpfung aus. Sie müssen nur Indizes erstellen, um Ihre Anfragen zu unterstützen:

create index ix_genetable_genesymbol on genetable(genesymbol) 
create index ix_genetable_genename on genetable(genename) 

Bitte beachten Sie, dass für alle Attribute der Suche (SELECT *) im Allgemeinen als bad habit angesehen wird. Wenn Sie wirklich nur drei Attribute haben bieten Sie in Ihrer Frage und id ist ein Primärschlüssel dann wird die folgende Abfrage ausführen viel schneller, da es mit den obigen Abfragen abgedeckt werden:

SELECT id FROM GeneTable WHERE GeneSymbol LIKE 'ACR' OR GeneName LIKE 'ACR'; 
+0

Ich indexierte die Spalten. Die Leistung scheint immer noch nicht auf dem neuesten Stand zu sein. –

+0

@NiamatZawad sind die vom Optimierer verwendeten Indizes? (Verwenden Sie EXPLAIN) –

+0

Ich überprüfte die Ergebnisse und beide Indizes werden vom Optimierer verwendet. –

Verwandte Themen