Ok, so ist der Titel ein wenig verschachtelt. Dies ist im Grunde genommen ein Problem der größten Art, aber ich kann es nicht für das Leben von mir herausfinden.Postgres, table1 Links Join Tabelle2 mit nur 1 Zeile pro ID in Tabelle1
Ich habe eine Tabelle, user_stats:
------------------+---------+---------------------------------------------------------
id | bigint | not null default nextval('user_stats_id_seq'::regclass)
user_id | bigint | not null
datestamp | integer | not null
post_count | integer |
friends_count | integer |
favourites_count | integer |
Indexes:
"user_stats_pk" PRIMARY KEY, btree (id)
"user_stats_datestamp_index" btree (datestamp)
"user_stats_user_id_index" btree (user_id)
Foreign-key constraints:
"user_user_stats_fk" FOREIGN KEY (user_id) REFERENCES user_info(id)
ich für jede id die Statistiken erhalten möchten neueste Datumsstempel. Dies ist ein biggish Tisch, irgendwo in der Nachbarschaft von 41m Reihen, also habe ich eine temporäre Tabelle von User_id erstellt, last_date mit:
CREATE TEMP TABLE id_max_date AS
(SELECT user_id, MAX(datestamp) AS date FROM user_stats GROUP BY user_id);
Das Problem ist, dass Datumsstempel nicht eindeutig ist, kann, da es mehr als 1 Stat-Update an einem Tag (sollte ein echter Zeitstempel gewesen sein, aber der Typ, der das entworfen hat, war ein Idiot und es gibt zu viele Daten, um im Moment zurück zu gehen). So haben einige IDs mehrere Zeilen, wenn ich die JOIN:
SELECT user_stats.user_id, user_stats.datestamp, user_stats.post_count,
user_stats.friends_count, user_stats.favorites_count
FROM id_max_date JOIN user_stats
ON id_max_date.user_id=user_stats.user_id AND date=datestamp;
Wenn ich dies als Subselects tat ich, ich denke, 1 LIMIT könnte, aber ich habe immer gehört, die sind schrecklich ineffizient. Gedanken?
"... Ich habe immer gehört, dass diese fürchterlich ineffizient sind." Lass dich nicht in den Cargo-Kult hineinziehen! 'EXPLAIN' ist dein Freund! Probieren Sie es aus und finden Sie heraus, was der Abfrageoptimierer für Sie tun kann. – Charles