JDBC : parcourir une grosse table sans utilise LIMIT
1 réponse
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
'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...
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...