Cargar más
Núcleo · indexing, pagination, sorting
Dada una tabla bugs(id, token, title, category, device, reported_at, created_at, updated_at)
con unos 10 millones de filas, una app lista los bugs del reportero token = 'token4242' ordenados
por reported_at y luego por id, de 10 en 10. La última fila en pantalla es el bug con id = 6805335,
reported_at = '2020-02-02'. Devuelve las 10 filas siguientes de la lista.
Devuelve las columnas (id, reported_at).
Columnas esperadas
id, reported_at
Pistas
Pista 1: empates en el cursor
Mira las filas de token4242 del 2020-02-02: varios bugs comparten esa fecha. reported_at > '2020-02-02' se salta los que van después del id 6805335, y >= repite los que ya se mostraron. El cursor necesita las dos columnas.
Pista 2: la columna oculta
Un índice secundario guarda la clave primaria después de sus propias columnas, así que index_bugs_on_category_and_token_and_reported_at está realmente ordenado por (category, token, reported_at, id). Fija category y token, y ORDER BY reported_at, id es exactamente el orden del índice.
Pista 3: escribe el cursor completo
Escribe «después de (D, N)» como reported_at > D OR (reported_at = D AND id > N). Compara EXPLAIN y las filas leídas con la forma corta de constructor de fila (reported_at, id) > (D, N).