Ich habe Probleme mit einer großen Suche.Laravel große angepasste Suche
Dies sind meine Tabellen
Fahrzeuge
id | Beschreibung | weight_max | weight_empty | Benutzer-ID | Kategorie_ID | type_idKategorien
ID | Name | Beschreibung | FarbeTypen
ID | Namevehicle_usages
id | Datum von | Datum zu | Fahrzeug_ID | Standort-ID | usage_type_idPositionen
ID | Adresse | lat lng
Das Suchformular definiert zusätzliche die category
, mehrere types
, date from
, date to
, zip code
, radius
und benutzerdefinierte Kategorie Fahrzeugdaten verbunden.
Jetzt möchte ich die Fahrzeuge (im Moment etwa 10k Zeilen) nach oben genannten Kriterien filtern. Zuerst überprüfe ich, ob das Anfrage-Array die Kategorie enthält und ob der Wert eine ganze Zahl ist. Wenn ja, bekomme ich alle Fahrzeuge nach der Kategorie $vehicles = Vehicle::where('category_id', $request['category']);
gefiltert.
Dann mache ich das gleiche mit den Typen und drücken Sie jeden Typ in ein Array, um $vehicles->whereIn('type_id', $types)
zu verwenden.
Danach bekomme ich alle Fahrzeuge wie $vehicles = $vehicles->get()
.
Wenn es fertig ist, bekomme ich die aktuellen lat
und lng
per Postleitzahl und berechnen Sie den Radius für jedes Fahrzeug durch den aktuellen Standort. Wenn der Radius größer als der Eingang radius
ist, lehne ich das Fahrzeug ab.
Zumindest jedes Fahrzeug mit einer vehicle_usage
, die mit dem Eingang date from
und date to
überlappt wird abgelehnt.
Mit etwa 10k vehicles
, wo jedes Fahrzeug hat etwa 5 vehicle_usages
pro Monat diese Suche dauert sehr lange und erreicht die maximale Ausführungszeit (60 Sekunden).
Wie könnte ich meine Suche beschleunigen?
Ich sehe schon diese 3 Möglichkeiten. Aber in meinem Fall würde ich sagen, dass es nicht wirklich eine mögliche Ursache für die Radius-Suche ist, die durch die Benutzereingabe berechnet werden muss. Auch der aktuelle Standort eines Fahrzeugs hängt davon ab, ob es eine "Fahrzeugnutzung" gibt oder nicht – DestinatioN