En retard au magasin 7
Échauffement · indexing, sorting, limit
Étant données 2 tables, customers(id, name, country) et
rentals(id, store_id, customer_id, inventory_id, status, rental_date, amount) de 3 millions de lignes,
listez les 10 locations les plus récentes du magasin 7 dont le status est 'late', rental_date le plus
récent en premier. Si deux partagent le même rental_date, l'id le plus élevé passe en premier.
Renvoyez les colonnes (id, rental_date).
Colonnes attendues
id, rental_date
Indices
Indice 1 : un index, deux rôles
SHOW INDEX FROM rentals : idx_store_status_date est (store_id, status, rental_date). Avec store_id et status fixés par égalité, ses entrées sont déjà triées par rental_date : le même index peut trouver les lignes et les renvoyer dans l'ordre.
Indice 2 : le même sens
Un index se lit vers l'avant ou à rebours, mais pas les deux à la fois. Tout index secondaire se termine aussi par la clé primaire, donc rental_date DESC, id DESC est un seul parcours à rebours. Mélanger DESC et ASC oblige MySQL à rassembler toutes les lignes correspondantes et à les trier.