No creo que hay una manera fácil de hacer esto, pero ante la posibilidad de que no hay ...resultados deseados dada y la información de base de datos, programically construir una consulta SQL que da esos resultados
que me dan una cantidad de listas de alrededor de 10000 registros cada una de una tabla de registros de 10 millones. Los datos se generan actualmente mediante consultas en varios elementos no indexados. Quiero generar automáticamente consultas que den los mismos resultados, usando diez campos indexados separados.
¿Existe algún algoritmo conocido para construir algo como esto? Más allá de los conceptos básicos de incluir cada 'nodo' indexado con su propia OR, quiero decir.
Por ejemplo, suponiendo que los datos quería es:
Letter, Number
A, 1
A, 2
B, 1
C, 2
y la base de datos original tiene
Letter, Number
A, 1
A, 2
A, 3
B, 1
C, 1
C, 2
D, 1
D, 3
me gustaría algo así como:
WHERE ((Letter = 'A' OR Letter = 'B') AND (Number = 1 OR Number = 2))
OR (Letter = 'C' and Number = 2)
O tal
WHERE (Letter IN ('A', 'B', 'C') AND Number IN (1, 2)
AND NOT (Number = 1 AND Letter = 'C'))
Pero yo creo prefiero no tengo
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 menos que los expertos de bases de datos aquí piensan que eso sería mucho más optimizado en el largo plazo, para el tamaño de la muestra que estamos hablando . El tiempo de ejecución de las consultas es importante; el tiempo de ejecución de la herramienta de conversión no lo es. Tampoco necesito necesariamente obtener la 'mejor' respuesta; 'lo suficientemente bueno' es aceptable.
Mi plan actual es contar, clasificar e iterar buscando cosas que puedan agruparse, para tratar de hacer el menor número posible de "agrupaciones"; Creo que preferiría no tener diez mil (A y B y C y D y E y F y G y H e I y J) en OR juntos.
¿Pensamientos? ¿Asesoramiento experto?
Cualquier idea sobre cómo etiquetar esto, también es apreciada. No es realmente una pregunta SQL, tanto como una pregunta independiente del lenguaje que ocurre en un espacio SQL. Probablemente debería separar la reflexión sobre la optimización en otro lugar; Estoy más interesado en el algoritmo, aquí. – Trevel
Agregué la etiqueta 'algorithm'. Puede haber un algoritmo específico o un problema llamado que se adapte a esto, pero no sé lo que podría ser. –
Todas estas consultas darán como resultado un plan de consulta equivalente en la mayoría de las bases de datos. Los DB no pueden hacer disyunciones de manera eficiente. –