Czy istnieje sposób grupowania według klucza unikatowego (podstawowego), w zasadzie dając domyślną gwarancję, że inne kolumny z tej tabeli będą dobrze zdefiniowane?GROUP PRZEZ tylko klucz podstawowy, ale wybierz inne wartości.
SELECT myPrimaryKey, otherThing
FROM myTable
GROUP BY myPrimaryKey
wiem, że mogę dodać inne kolumny do rachunku (GROUP BY myPrimaryKey,otherThing
), ale staram się uniknąć. Jeśli jesteś ciekaw, dlaczego, czytaj dalej:
Mam oświadczenie, które jest w zasadzie to robi:
SELECT nodes.node_id, nodes.node_label, COUNT(1)
FROM {a couple of joined tables}
INNER JOIN nodes USING (node_id)
GROUP BY nodes.node_id, nodes.node_label
które działa prawidłowo, ale jest nieco powolny w MySQL. Jeśli usuniemy nodes.node_label
z GROUP BY
, będzie on działał około 10 razy szybciej (zgodnie z EXPLAIN
, dzieje się tak dlatego, że jedno z wcześniejszych sprzężeń rozpoczyna indeksowanie, gdy wcześniej nie było).
Jesteśmy w procesie migracji do PostgreSQL, więc wszystkie nowe oświadczenia mają być kompatybilne z zarówno MySQL i Postgres jeśli to możliwe. Teraz w Postgresie oryginalna instrukcja działa szybko, ale nowa instrukcja (ze zmniejszoną grupą o) nie zostanie uruchomiona (ponieważ Postgres jest ostrzejszy). W tym przypadku jest to błąd fałszywy, ponieważ instrukcja jest właściwie zdefiniowana.
Czy istnieje składnia, której mogę użyć, która pozwoli uruchomić tę samą instrukcję na obu platformach, jednocześnie pozwalając MySQL używać tylko jednej kolumny w grupie przez prędkość?
'W tym przypadku jest to błąd, ponieważ fałszywe oświadczenie jest rzeczywiście dobrze defined.' No no no, MySQL akceptuje weirds rzeczy dla GROUP BY (z nieprzewidywalnymi wynikami), wszystkie inne DBMS zmuszają cię do uzyskania przewidywalnych wyników (co jest zwykle przydatne). Aby znaleźć rozwiązanie, wolę pracować nad zarządzaniem indeksami, aby uniknąć spowolnienia MySql! –
@ RaphaëlAlthaus zazwyczaj jest to prawda, ale grupowanie według klucza podstawowego (lub dowolnego klawisza 'UNIQUE') zapewnia, że wszystkie inne wartości w tej samej tabeli są dobrze zdefiniowane. – Dave
, ale wątpię, że tak działa dbms. Nie sądzę, aby skanowanie zapytań i analizowanie parsowania dla kluczy podstawowych/kluczy unikalnych. To przychodzi później (optymalizacja zapytania/strategia wykonywania) ... –