Nie sądzę, istnieje łatwy sposób to zrobić, ale na off szansa, że nie ma ...Podane pożądanych rezultatów oraz informacje bazy danych, programically budować zapytania SQL, który daje te wyniki
Ja podanych liczba list zawierających około 10 000 rekordów z 10 milionów tabel rekordów. Dane są obecnie generowane przez zapytania dotyczące różnych nieindeksowanych elementów. Chcę automatycznie budować zapytania, które dają takie same wyniki, używając dziesięciu oddzielnych indeksowanych pól.
Czy istnieje znany algorytm do budowania czegoś takiego? Poza tym, że mam na myśli podstawy każdego z indeksowanych "węzłów" z własnym OR.
Eg, przy założeniu, że dane chciała to:
Letter, Number
A, 1
A, 2
B, 1
C, 2
i oryginalna baza danych ma
Letter, Number
A, 1
A, 2
A, 3
B, 1
C, 1
C, 2
D, 1
D, 3
Chciałbym coś takiego:
WHERE ((Letter = 'A' OR Letter = 'B') AND (Number = 1 OR Number = 2))
OR (Letter = 'C' and Number = 2)
czy może
WHERE (Letter IN ('A', 'B', 'C') AND Number IN (1, 2)
AND NOT (Number = 1 AND Letter = 'C'))
Ale myślę Wolałbym nie mieć
WHERE (Letter = 'A' AND Number = '1') OR
(Letter = 'A' AND Number = '2') OR
(Letter = 'B' AND Number = '1') OR
(Letter = 'C' AND Number = '2')
- chyba że eksperci bazy danych tutaj myślę, że byłoby dużo bardziej zoptymalizowany w dłuższej perspektywie, dla wielkości próby mówimy o . Czas uruchamiania zapytań jest ważny; czas działania narzędzia do konwersji nie jest. Nie potrzebuję też koniecznie uzyskać "najlepszej" odpowiedzi; "wystarczająco dobre" jest dopuszczalne.
Mój obecny plan polega na liczeniu, sortowaniu i iteracji poprzez poszukiwanie rzeczy, które można pogrupować, aby spróbować zrobić jak najmniej "zgrupowań"; Myślę, że wolałbym nie mieć razem dziesięciu tysięcy (A i B oraz C i D oraz E i F oraz G i H oraz I i J).
Myśli? Porada eksperta?
Wszelkie przemyślenia na temat oznaczania tego również zostały docenione. Nie jest to tak naprawdę pytanie SQL, tak samo jak pytanie o charakterze agnostycznym, które zdarza się w przestrzeni SQL. Prawdopodobnie powinienem oddzielić rozmyślania nad optymalizacją gdzie indziej; Bardziej interesuje mnie algorytm, tutaj. – Trevel
Dodałem tag "algorytm". Może istnieć konkretny, nazwany algorytm lub nazwany problem, który pasuje do tego, ale nie wiem, co to może być. –
Wszystkie te zapytania spowodują równoważny plan zapytania dla większości baz danych. Bloki DB nie mogą efektywnie tworzyć rozłączeń. –