2017-04-16 2 views

Antwort

1

Active verwendet reguläre SQL-Abfragen, was Aktivitäten, die Sie es ausführen möchten auszuführen. Wenn Sie ActiveRecord verwenden, um die Abfrage in Ihrem Auftrag zusammenzustellen, kann es offensichtlich sein, dass Sie einen weniger effizienten Weg wählen, als Sie es tun würden.

Dies ist eine Standardkonvertierung gegen alle aktuellen ORMs.

Aber die selbe Abfrage, die als row sql und through activerecord ausgegeben wird, hat die gleichen Auswirkungen auf die Leistung selbst im Speicher.

1

Wenn Ihre Frage lautet: "In den folgenden Beispielen erfordert die zweite deutlich mehr Speicher?".

Beispiel 1:

$query = $this->db->query("SELECT `id`,`somefield` FROM `some_table` WHERE `id` = $id Order by `somefield` DESC"); 

Beispiel 2:

$query = $this->db 
      ->select('id, somefield') 
      ->from('some_table') 
      ->where('id, $id) 
      ->order_by('somefield', 'DESC'); 
      ->get(); 

Die Antwort ist, dass die Speicher Unterschied nicht signifikant ist. Es gibt einige zusätzliche Speicher, aber in dem Schema der Dinge ist es nicht viel.

Der Zweck von Active Record (umbenannter Query Builder seit CI v3) besteht im Erstellen einer Abfrageanweisungszeichenfolge. Das Active Record-Beispiel führt viel mehr Code aus, um die gleiche Anweisung zu erstellen, die im ersten Beispiel definiert wurde. Nachdem es die Anweisung konstruiert hat, macht es buchstäblich genau den gleichen Aufruf wie das erste Beispiel.

Wenn die Active Record-Klasse geladen wird (bestimmt durch eine Datenbankkonfigurationseinstellung), wird Speicher zugewiesen, um diesen Code zu speichern, unabhängig davon, ob Sie ihn verwenden oder nicht.

Die Verwendung von Active Record erfordert viel mehr Eingabe. Warum, wenn die Abfrage einfach in einer einfachen Zeichenfolge angegeben werden kann?

Andererseits kann in einer Situation, in der eine andere Abfrageanweisung bedingt erforderlich sein kann (z. B. andere Felder, zusätzliche oder andere "Where" -Bedingungen, eine alternative Sortierreihenfolge usw.) Active Record Ihre das Leben viel einfacher. Beispielsweise.

Zugegebenermaßen könnte das obige Beispiel ziemlich einfach wieder hergestellt werden, indem man einen String bedingt verkettet. Aber komplexere Situationen könnten leicht existieren.

Verwandte Themen