Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

JDBC : parcourir une grosse table sans utilise LIMIT

1 réponse
Avatar
Pif
Bonjour, je veux parcourir le résultat d'un select dans une table avec
JDBC/MYSQL

En gros, j'ai une liste par exemple

table: (livre, nom, prenom) qui fait une correspondance auteur/ouvrage.

Je veux en gros parcourir dans JDBC un "select distinct nom,prenom",
mais qui me renvoie des centaines de milliers d'enregistrement...

du coup, envoyer tout en une seule requete c'est pas terrible.
L'usage du LIMIT n,nb est particulièrement lent...

C'est un peu "chiant" de devoir créer une table intermédiaire avec un
identifiant rien que pour pouvoir faire des select avec id> a et id <
b.. bien que ce soit le plus rapide...

Quelqu'un a-t-il une solution à me proposer ?

merci !

1 réponse

Avatar
MaXX
'jour,
Pif wrote:
Bonjour, je veux parcourir le résultat d'un select dans une table avec
JDBC/MYSQL
En gros, j'ai une liste par exemple
table: (livre, nom, prenom) qui fait une correspondance auteur/ouvrage.
Je veux en gros parcourir dans JDBC un "select distinct nom,prenom",
mais qui me renvoie des centaines de milliers d'enregistrement...
du coup, envoyer tout en une seule requete c'est pas terrible.
L'usage du LIMIT n,nb est particulièrement lent...

[...]


Quelqu'un a-t-il une solution à me proposer ?
Peut être les curseurs si ils sont supportés par la version de MySQL/JDBC

utilisée?
Déclarer un curseur à l'endroit voulu (critère = valeur) puis récupérer les
ligne une à une...
http://dev.mysql.com/doc/mysql/fr/cursors.html

En générale l'utilisation de DISTINCT est lente vu que le moteur de la table
doit lire toute la base pour trouver les valeurs. Normaliser la table peut
donner un sérieux coup de main...

table livres
id_auteur
titre
clé étrangère ->auteurs.auteur_id

table auteurs
auteur_id (unique)
nom
prénom
et faire un select utilisant une jointure... Comme la table auteurs est plus
petite que la table livre (où tout est entassé) le "coût" du DISTINCT sera
moins important...

merci !
Mes deux eurocents...

--
MaXX