Io non credo che ci sia un modo semplice per fare questo, ma sulla remota possibilità che ci sia ...dato risultati desiderati e le informazioni del database, programically costruire una query SQL che dà questi risultati
mi viene data un numero di elenchi di circa 10000 record ciascuno da una tabella di record di 10 milioni. I dati sono attualmente generati da query su vari elementi non indicizzati. Voglio creare automaticamente query che danno gli stessi risultati, utilizzando dieci campi separati indicizzati.
Esiste un algoritmo noto per la costruzione di qualcosa di simile? Oltre le basi di includere ogni 'nodo' indicizzato con il proprio OR, voglio dire.
Per esempio, supponendo che i dati voluto è:
Letter, Number
A, 1
A, 2
B, 1
C, 2
e il database originale ha
Letter, Number
A, 1
A, 2
A, 3
B, 1
C, 1
C, 2
D, 1
D, 3
mi piacerebbe qualcosa di simile:
WHERE ((Letter = 'A' OR Letter = 'B') AND (Number = 1 OR Number = 2))
OR (Letter = 'C' and Number = 2)
O forse
WHERE (Letter IN ('A', 'B', 'C') AND Number IN (1, 2)
AND NOT (Number = 1 AND Letter = 'C'))
Ma io pensare Preferirei non avere
WHERE (Letter = 'A' AND Number = '1') OR
(Letter = 'A' AND Number = '2') OR
(Letter = 'B' AND Number = '1') OR
(Letter = 'C' AND Number = '2')
- a meno che gli esperti di database qui pensano che sarebbe molto più ottimizzato nel lungo periodo, per la dimensione del campione di cui stiamo parlando . Il tempo di esecuzione delle query è importante; il tempo di esecuzione dello strumento di conversione non lo è. Inoltre, non ho bisogno di ottenere necessariamente la risposta "migliore"; 'abbastanza buono' è accettabile.
Il mio piano attuale è quello di contare, ordinare e scorrere alla ricerca di cose che possono essere raggruppati insieme, per cercare di fare il minor numero di 'raggruppamenti' possibile; Penso che non preferirei avere diecimila (A e B e C e D e E e F e G e H e I e J) s 'ORed insieme.
Pensieri? Consigli degli esperti?
Qualsiasi idea su come taggare questo, anche apprezzato. Non è davvero una domanda SQL, tanto quanto una questione indipendente dalla lingua che si verifica in uno spazio SQL. Probabilmente dovrei separare la riflessione sull'ottimizzazione in qualche altro posto; Sono più interessato all'algoritmo, qui. – Trevel
Ho aggiunto il tag "Algoritmo". Potrebbe esserci uno specifico algoritmo denominato o un problema denominato che si adatta a questo, ma non so cosa potrebbe essere. –
Tutte queste query genereranno un piano di query equivalente sulla maggior parte dei database. I DB non possono fare disgiunzioni in modo efficiente. –