Yo !
En quête d'une meilleure solution que celle que j'avais posté à l'époque, un pote me dit par mail "ouais, mais si tu veux les lignes 1 000 000 000 à 1000 000 010, ça rame avec le coup des orders.
Pas convaincu par ses dires, je teste (y'a que ça de vrai )
Et il a raison, les order by dans tous les sens, c'est tout pourri ça sent mauvais des pieds.
Mais rien ne me résiste. J'ai trouvé ze truc de la mort qui tue la vie jusqu'à ce qu'elle soit morte.
Voici mon mail :
Citation :
Je suis pas certain que le coup des TOP soit si lent que ça avec beaucoup de données. Après, ça dépends surtout si lappli tourne sur le serveur BDD ou non.
-> Ben si en fait.
-> ATTENTION : Mon génie créatif viens de trouver le truc qui déchire sa race, je te trouve les infos en 1 seconde maintenant !!! (voir tout en bas)
Sur mon poste (SQL Server 2000 / HDD de portable / 512 Mo RAM)
Select count(*) from evl
-> 413933 en 17 secondes
Select * from evl order by numeve (non indexée)
-> 2 minutes 40 secondes pour retourner les lignes + chargement des données
select * from (
select top 20 * from ( select top 400000 * from evl order by numeve ) as t1 order by numeve DESC) as t2 order by numeve
-> Plus de 5 minutes (stoppé) pour retourner les lignes + chargement des données
create index ix_numeve on evl (numeve)
-> 17 secondes
Select * from evl order by numeve (non indexée)
-> 1 minute 58 secondes pour retourner les lignes + chargement des données
select * from (
select top 20 * from ( select top 400000 * from evl order by numeve ) as t1 order by numeve DESC) as t2 order by numeve
-> Plus de 3 minutes 26 pour retourner les lignes + chargement des données
HOURRA !!!!!
Je crois que je viens de trouver !!!!!
select top 20 *
from evl
where numeve > (select max(numeve) from (select top 400000 numeve from evl order by numeve) t)
order by numeve
-> 1 seconde !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Si le critère de tri peut être étendu à une PK ça semble marcher
|
Message édité par Arjuna le 24-03-2006 à 14:22:59