Oracle - CONSULTA A TABLA CON 16 MILLONES DE REGISTROS

   
Vista:

CONSULTA A TABLA CON 16 MILLONES DE REGISTROS

Publicado por SANTIAGO VICTORINO CANO (1 intervención) el 20/09/2016 21:34:40
Buen día,

Actualmente me encuentro con un problema en mi trabajo, dado que es necesario ejecutar una "Busqueda inteligente" sobre una tabla en la base de datos con mas de 16 millones de registros, he probado varias posibilidades

1. SELECT HD_INCIDENT_ID FROM HD_INCIDENT_HISTORY WHERE HD_COMMENTS LIKE '%PRUEBA%'
2. SELECT HD_INCIDENT_ID FROM HD_INCIDENT_HISTORY (CONTAINS(HD_COMMENTS, '%PRUEBA%', 1) > 0))

Pero ninguna de las anteriormente nombradas funcionan, quisiera conocer si existe una forma optima y facil de implementar para suplir la funcionalidad

GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

CONSULTA A TABLA CON 16 MILLONES DE REGISTROS

Publicado por JORGE SANCHEZ (186 intervenciones) el 20/09/2016 23:48:18
GENERA ESTADISTICAS PARA LA TABLA

ANALYZE TABLE HD_INCIDENT_HISTORY COMPUTE STATISTICS;

PUEDES USAR HINTS

SELECT /*+ PARALLEL ( T,4) */ HD_INCIDENT_ID FROM HD_INCIDENT_HISTORY T WHERE HD_COMMENTS LIKE '%PRUEBA%'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONSULTA A TABLA CON 16 MILLONES DE REGISTROS

Publicado por Rafael (202 intervenciones) el 22/09/2016 07:27:17
Hola

Cuando dices que no funciona a que te refieres ¿marca error o tarda mucho?

Ahora bien te comentan generar estadísticas ... esto es una buena practica... pero no siempre una solución
Como sea calcula estadísticas.

Que tipo de dato es la columna HD_COMMENTS???
El HINT que te proponen es PESIMA idea, lo comento por que te proponen usar un paralelo con valores que desconocen si tienes o no la capacidad en el servidor.

Mejor cuéntanos mas como es la tabla, que índices tiene???
Puedes pegar un explain plan de la consulta???

Prueba con algo así para poder diagnosticar :
1
2
3
4
5
6
SET LINESIZE 2000
SET PAGESIZE 0
EXPLAIN PLAN FOR
SELECT HD_INCIDENT_ID FROM HD_INCIDENT_HISTORY WHERE HD_COMMENTS LIKE '%PRUEBA%'
;
SELECT * FROM table(DBMS_XPLAN.DISPLAY);

Muestranos el resultado...

y en su defecto
1
2
3
4
5
6
SET LINESIZE 2000
SET PAGESIZE 0
EXPLAIN PLAN FOR
SELECT HD_INCIDENT_ID FROM HD_INCIDENT_HISTORY (CONTAINS(HD_COMMENTS, '%PRUEBA%', 1) > 0))
;
SELECT * FROM table(DBMS_XPLAN.DISPLAY);

En principio deberían ser similares los resultados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar