2010-06-10 9 views
1

Dites que j'ai une table X avec 100 enregistrements et que l'exécution d'un select * from X prend 100 secondes.Quels gains de performances puis-je attendre de la pagination de base de données?

Combien de temps devrais-je attendre la requête select top 10 * from X?

Je m'attendrais à ce que la relation soit plus ou moins linéaire donc 10 secondes. Est-ce correct, ou la relation est-elle non-linéaire d'une manière ou d'une autre?

+0

Substituez 'top' dans la deuxième requête avec la syntaxe de pagination de votre rdbms préférée. Je cherche seulement une réponse "en général" – StevenWilkins

Répondre

0

Votre coût de performance est dans deux domaines différents:

  • Pendant combien de temps il faut pour effectuer la requête
  • Pendant combien de temps il faut pour retourner les résultats

Souvent, une requête sera rapide, mais le retour des résultats sera lent, car il est lié aux E/S. Si c'est le cas, vous verrez une accélération approximativement linéaire en retournant moins de résultats. Cependant, si la requête elle-même est compliquée, les choses sont différentes. Si ce n'est pas seulement select * from X, mais select * from X where [complicated-expression], alors les résultats peuvent varier considérablement entre les implémentations de base de données. Dans ce cas, votre performance peut être dominée par la complexité de la requête, auquel cas vous ne verrez pas autant d'avantages en retournant simplement moins de résultats.

+0

Et bien sûr, vous ne voulez jamais utiliser select * dans tous les cas. Pour les résons de performance, ne renvoyez jamais de colonnes sauf celles dont vous avez besoin et si vous avez une jointure, il y a toujours des colonnes dont vous n'avez pas besoin. Pour la maintenabilité, ne comptez jamais sur select *, car cela risque de provoquer des problèmes lorsque les modifications de la base de données sont effectuées. Par exemple, supposons que vous ayez utilisé select * dans une requête UNION et qu'une seule des branches union ait des tables où une colonne supplémentaire a été ajoutée. Supposons que vous affichez des données à l'utilisateur et qu'une colonne a été ajoutée que vous ne souhaitiez pas que l'utilisateur voit? – HLGEM

+0

assez juste, merci. @HLGEM bon conseil. – StevenWilkins