2010-08-02 2 views

Répondre

1

La requête récupère toutes les lignes de tableName, et récupère alors le nombre de lignes dans tableName. Faire cela avec SQL_CALC_FOUND_ROWS est juste une optimisation des performances: cela vous évite de faire deux requêtes.

Si les performances ne sont pas un problème, un équivalent pour Oracle serait:

SELECT * FROM tableName 
SELECT count(*) from tableName 

Si vous êtes en mesure de réécrire le client, vous pouvez faire les deux en une seule requête:

SELECT * 
,  (SELECT count(*) from tableName) as totalRows 
FROM tableName 
+3

Le SQL suivant effectue la deuxième option en un seul passage: 'sélectionnez a. *, Count (*) sur() comme total_rows à partir de [table_name] a'; –

+0

@Adam Musch: Le faire en un seul passage n'est pas tout ce qu'il est censé être. Dans la version OP, une analyse complète de la table et un balayage complet rapide sur l'index (en supposant qu'il y en ait un) sont requis. Pour votre version, la fonction de fenêtre doit être appliquée au résultat de l'analyse complète de la table. Sous des tests limités sur une table avec plus de 9 millions de lignes, la version de l'OP est nettement plus rapide (en particulier avec l'indice des premières lignes). – Allan

+0

@Allan - Les kilomètres parcourus peuvent toujours varier, mais il est préférable de le faire en une seule fois, à moins d'avoir une raison impérieuse (par exemple, une mémoire de tri limitée) de ne pas le faire. –

Questions connexes