it-swarm.com.de

Was ist schneller? Db_query, db_select oder EntityFieldQuery

Also versuche ich herauszufinden, was schneller ist als db_query, db_select oder EntityFieldQuery. Derzeit verwende ich EntityFieldQuery. Ich greife nach ungefähr 1600 Knoteneinträgen.

Mir ist klar, dass dies das System belasten kann, daher möchte ich nur herausfinden, welche Option die beste ist, um 1600 Knoten zu erfassen. Das Abschalten von Sekunden oder sogar Millisekunden wäre für die von mir erstellte Anwendung von großer Bedeutung.

Vielen Dank im Voraus für Ihre Antworten.

15
Jorge Calderon

Um Ihre Frage kurz zu beantworten: db_query ist die schnellste! Hier sind einige Gründe, Fakten und Zahlen, die aus verschiedenen Fragen und Quellen zusammengestellt wurden:

Wenn Sie diese Frage einfach googeln, erhalten Sie folgende Ergebnisse:

For simple queries, db_query() is 22% faster than db_select()
For simple queries, db_query() is 124% faster than EFQ
For queries with two joins, db_query() is 29% faster than db_select()

und das

db_query():

Total Incl. Wall Time (microsec):   796 microsecs
Total Incl. CPU (microsecs):    0 microsecs
Total Incl. MemUse (bytes): 123,352 bytes
Total Incl. PeakMemUse (bytes): 124,248 bytes
Number of Function Calls:   38

db_select()

Total Incl. Wall Time (microsec):   1,118 microsecs
Total Incl. CPU (microsecs):    0 microsecs
Total Incl. MemUse (bytes): 425,216 bytes
Total Incl. PeakMemUse (bytes): 436,392 bytes
Number of Function Calls:   88

Wenn Sie oben bemerken, führt db_select mehr Funktionsaufrufe durch und verwendet mehr Speicher als db_query.

  1. Unter hier finden Sie Gründe für die Verwendung von db_select
  2. Unter hier finden Sie Gründe, warum EntityFieldQuery über db_select verwendet werden soll
  3. Siehe hier zum Leistungsvergleich von db_query und db_select

Ich denke, die Wahl sollte ausschließlich auf Ihren Anforderungen basieren. EntityFieldQuery ist möglicherweise langsamer, bietet jedoch viele Vorteile wie einfache Syntax, steckbaren Feldspeicher, lose Kopplung und vieles mehr.

24
Raf

Das ist eine sehr schlechte Idee. Bei 1600 Knoten sollten Sie die APIs nicht umgehen und EntityFieldQuery verwenden. Sie optimieren das Falsche.

1
user49

Wenn Sie nur die Felddaten von allen 1600 Knoten möchten, kann EFQE hilfreich sein. Wenn Sie bereits über den EFQ verfügen, sollten Sie auf der Sandbox-Seite herausfinden können, was Sie benötigen.

1
mikeytown2