Oracle convierte internamente listas de EN a listas de OR de todos modos, por lo que realmente no debería haber diferencias de rendimiento. La única diferencia es que Oracle tiene que transformar los IN, pero tiene cadenas más largas para analizar si proporciona las RUP usted mismo.
Así es como se prueba eso.
CREATE TABLE my_test (id NUMBER);
SELECT 1
FROM my_test
WHERE id IN (1,2,3,4,5,6,7,8,9,10,
21,22,23,24,25,26,27,28,29,30,
31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,
51,52,53,54,55,56,57,58,59,60,
61,62,63,64,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,89,90,
91,92,93,94,95,96,97,98,99,100
);
SELECT sql_text, hash_value
FROM v$sql
WHERE sql_text LIKE '%my_test%';
SELECT operation, options, filter_predicates
FROM v$sql_plan
WHERE hash_value = '1181594990'; -- hash_value from previous query
instrucción SELECT
tabla de acceso completa ("ID" = 1 OR "ID" = 2 OR "ID" = 3 OR "ID" = 4 O "ID" = 5 OR "ID "= 6 O" ID "= 7 O" ID "= 8 O" ID "= 9 O" ID "= 10 O" ID "= 21 O " ID "= 22 O" ID "= 23 O" ID " = 24 O "ID" = 25 O "ID" = 26 O "ID" = 27 O "ID" = 28 O "ID" = 29 O "ID" = 30 O "ID" = 31 O "ID" = 32 O "ID" = 33 O "ID" = 34 O "ID" = 35 O "ID" = 36 O "ID" = 37 O "ID" = 38 O "ID" = 39 O "ID" = 40 O "ID" = 41 O "ID" = 42 O "ID" = 43 O "ID" = 44 O "ID" = 45 O "ID" = 46 O "ID" = 47 O "ID" = 48 O "ID" = 49 O "ID" = 50 O "ID" = 51 O R "ID" = 52 O "ID" = 53 O "ID" = 54 O "ID" = 55 O "ID" = 56 O "ID" = 57 O "ID" = 58 O "ID" = 59 O "ID" = 60 O "ID" = 61 O "ID" = 62 O "ID" = 63 O "ID" = 64 O "ID" = 65 O "ID" = 66 O "ID" = 67 O "ID" = 68 O "ID" = 69 O "ID" = 70 O "ID" = 71 O "ID" = 72 O "ID" = 73 O "ID" = 74 O "ID" = 75 O "ID" = 76 O "ID" = 77 O "ID" = 78 O "ID" = 79 O "ID" = 80 O "ID" = 81 O "ID" = 82 O "ID" = 83 O " ID "= 84 O" ID "= 85 O" ID "= 86 O" ID "= 87 O " ID "= 88 O" ID "= 89 O" ID "= 90 O" ID "= 91 O" ID "= 92 O" ID "= 93 O " ID "= 94 O" ID "= 95 O" ID "= 96 O" ID "= 97 O" ID "= 98 O" ID "= 99 O " ID "= 100)
¿La lista está estática o derivada de una consulta? – Phil
No, la lista de valores a consultar se recuperó de un recurso externo. ¿Hay alguna manera de resolver este problema, porque mi lista es demasiado grande, puede contener más de 100000 elementos? –
Por lo tanto, está creando una cadena de consulta masiva que contiene algo como IN (... 9997, 9998, 9999, 1000,1001. ..)? Eso en sí va a costar mucho, transmitir y analizar. No importa las posibilidades de inyección de sql. –