2017-10-20 14 views
0

J'ai une requête qui sélectionne les 5 derniers éléments ($ new) de ma base de données. Je veux exécuter cette requête toutes les 5 secondes avec une requête AJAX afin que je puisse mettre à jour ma table. Je sais que cette requête sélectionne les 5 derniers enregistrements mais je veux savoir si la requête parcourt tous les enregistrements et sélectionne les 5 derniers ou sélectionne-t-elle seulement les 5 derniers sans vérifier toutes les données?Une requête parcourt-elle toutes les données lorsque vous sélectionnez uniquement le dernier N?

Je suis vraiment inquiet que je vais avoir du retard.

+0

La réponse dépend de la structure de vos tables et de l'indexation disponible. Avec une indexation correcte disponible, il ne devrait pas y avoir d'analyse de table complète. Essayez-le et voyez par vous-même. – dasblinkenlight

Répondre

1

Vous avez besoin de deux index pour le rendre assez vite:

create index ix_OvenRuns_id on OvenRuns(id) 
create index ix_OvenRunData_ovenRunId on OvenRunData(ovenRunId) 

vous pouvez même mettre OvenRunData.dataIdOvenRunData.data dans le second, ou créer clustered index, cependant, ces indices évitent certainement analyse complète des données.

0

Le LIMIT est appliqué après la ORDER BY et le ORDER BY est appliqué à l'ensemble du jeu de résultats. Donc, la réponse à votre question est, oui, il doit passer par tous les enregistrements de votre jeu de résultats déterminés par votre clause WHERE avant d'appliquer le LIMIT.