Ich schrieb den folgenden UPDATE-Befehl, aber es gibt Redundanz in den Unterauswahlen. Ich bin kein Experte für SQL und würde mich freuen, wenn ich diese Abfrage effizienter machen könnte. Danke im voraus.Mysql Update-Befehl mit mehreren ähnlichen Unterauswahlen
update trips
set origin =
(select stop_name
from stops
inner join stop_times
on stops.stop_id = stop_times.stop_id
where stop_times.trip_id = trips.trip_id
order by stop_sequence asc
limit 1)
,
destination =
(select stop_name
from stops
inner join stop_times
on stops.stop_id = stop_times.stop_id
where stop_times.trip_id = trips.trip_id
order by stop_sequence desc
limit 1)
,
starts =
(select arrival_time
from stop_times
where stop_times.trip_id = trips.trip_id
order by stop_sequence asc
limit 1)
,
ends =
(select arrival_time
from stop_times
where stop_times.trip_id = trips.trip_id
order by stop_sequence desc
limit 1)
;
Im Folgenden finden Sie die relevanten Tabellendefinitionen. Es gibt ungefähr 72K Reisen, 8K Haltestellen und 2 Millionen Stoppzeiten. Vielleicht ein Durchschnitt von 20? stoppt pro Fahrt (nur Raten).
create table stop_times (
trip_id varchar(255),
arrival_time time,
stop_id varchar(255),
stop_sequence int unsigned,
) type=MyISAM;
alter table stop_times add index stop_id (stop_id(5));
alter table stop_times add index trip_id (trip_id(5));
create table stops (
stop_id varchar(255),
stop_name varchar(255),
stop_lat float,
stop_lon float,
primary key (stop_id)
) type=MyISAM;
create table trips (
route_id varchar(255),
trip_id varchar(255), /* primary key is here */
/* denormalized fields */
origin varchar(255),
destination varchar(255),
starts time,
ends time,
primary key(trip_id)
) type=MyISAM;
alter table trips add index route_id (route_id(5));
Wie haben Sie gemessen, dass es ineffizient ist? –
Bitte geben Sie Ihre Tabellendefinitionen sowie die Anzahl der Haltestellen für jede Reise an. –
Ich habe keine Ahnung, ob es im Vergleich zu einer besseren Lösung ineffizient ist, wenn es eine gibt. Ich führe dies über einen großen Datensatz und es dauert viele Minuten. Was SQL betrifft, sieht es für Sie OK aus? – dan