Pregunta

Tengo una gran mesa en una base de datos MySQL (6 millones de registros). Si vinculo la mesa, puedo abrirlo bien - parece que solicita acceso a los registros, según sea necesario. Sin embargo, si uso una consulta de paso a través, parece que solicita acceso a toda la tabla antes de abrirlo. Esto es bastante lento en mis tablas normales (200.000) los registros, pero los más grandes son imposibles. Quiero utilizar una pasarela para poder utilizar las instrucciones SQL, pero tengo que hacerlo más rápido. ¿Hay alguna forma de hacer esto? Gracias!

EDIT: Ésta es la consulta; no se puede conseguir mucho más simple que esto. SELECT * FROM Traffic12

¿Fue útil?

Solución

Su consulta está pidiendo la tabla entera. El acceso está haciendo exactamente lo que usted está diciendo que haga. Las únicas veces que utilizan un paso a través de la consulta son cuando se desea la cláusula WHERE (el filtrado) para ser ejecutado en el servidor o en el que se efectúen uniones en el servidor o cuando se está tomando ventaja de la funcionalidad del lado del servidor (por ejemplo, una UDF) o cuando se desea agregar "dando a entender" que el servidor back-end va a entender.

La ventaja de rendimiento evidente que se nota cuando no mediante una consulta p-t viene de Acceso ir a buscar sólo un cierto número de filas a la vez; pero estás pasando por alto esta optimización del algoritmo de búsqueda cuando se utiliza de paso a través.

Cuando el filtrado se realiza en el servidor de paso a través de consultas puede ser mucho más parsimonioso con el ancho de banda que no p-t y por lo tanto puede producir grandes mejoras de rendimiento relativos a la no-pase a través. O a veces el back-end es una máquina de 4-CPU humongous con cantidades inmensas de RAM y puede batir a través de grandes índices en un flash. Usted tiene que evaluar la situación para ver qué enfoque es mejor tomar todos los factores en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top