/ / ¿Cómo es SELECT DISTINCT tan rápido? [duplicado] - base de datos, sqlite, optimización, sqlite3

¿Cómo es tan rápido SELECT DISTINCT? [duplicado] - base de datos, sqlite, optimización, sqlite3

Posible duplicado:
SQL: ¿Cómo es DISTINCT tan rápido sin un índice?

Hola,

Tengo una base de datos con una tabla llamada "enlaces" con 600 millones de filas en SQLite. Hay 2 columnas en la base de datos: una columna "src" y una columna "dest". En la actualidad no hay índices.

Hay un buen número de valores comunes entre src y dest, pero también un buen número de filas duplicadas.

Lo primero que estoy tratando de hacer es eliminar todas las filas duplicadas y luego realizar un procesamiento adicional en los resultados, sin embargo, he estado encontrando algunos problemas extraños.

Primero, SELECCIONE * DE los enlaces DONDE src = 434923 Ydest = 5010182. Ahora, esto devuelve un resultado bastante rápido y luego toma bastante tiempo para ejecutarse, ya que asumo que está realizando un escaneo de tablas en el resto de las 600m filas.

Sin embargo, si hago SELECT DISTINCT * FROM links,entonces inmediatamente comienza a devolver filas muy rápidamente. La pregunta es: ¿cómo es esto posible? Seguramente para cada fila, la fila debe compararse con todas las demás filas de la tabla, pero esto requeriría una tabla de las filas restantes de la tabla que DEBERÍA lleva edades

¿Alguna idea de por qué SELECT DISTINCT es mucho más rápido que un SELECT estándar?

Respuestas

1 para la respuesta № 1

La pregunta duplicada merece una respuesta duplicada:

Para ser más precisos, una consulta no es más rápidaque el otro. Más precisamente, la cantidad de tiempo que se tarda en completar la consulta debe ser la misma para ambas consultas. La diferencia es que la consulta con DISTINCT simplemente tiene más filas que devolver, por lo que parece responder más rápido ya que está recibiendo filas a una velocidad rápida. Sin embargo, lo que está sucediendo bajo el capó de ambos es el mismo escaneo de la tabla. La consulta distinta tiene una estructura de datos que almacena lo que se ha devuelto y filtra duplicados. Por lo tanto, DEBERÍA tomar más tiempo hasta que la consulta se complete, pero (las filas devueltas) / el tiempo es mayor, ya que simplemente hay más filas que coinciden. (También tenga en cuenta: algunos espectadores agregan un límite de resultado de consulta que puede hacer que la consulta distinta parezca que se ejecuta más rápido (ya que alcanza el límite de resultado y se detiene)).