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).