2010-04-01 4 views
-1

Ok, je l'avoue ma situation est particulièreResultSet et l'agrégation

Il existe un système de données qui prend en charge SQL-92 et de l'interface JDBC

Cependant les Requets SQL sont assez chers, et dans ma demande que je dois récupérer les mêmes données plusieurs fois et les agréger ("grouper par") sur différents champs pour montrer différentes dimensions des mêmes données.

Par exemple sur un écran, j'ai trois tableaux qui montrent le même ensemble ou enregistrements mais regroupées par ville (1er réseau), par la population (2e réseau), par nombre de bébés (3e grille)

Ce montants à 3 requêtes SQL (ce qui est très lent), SAUF si quelqu'un d'entre vous peut suggérer n'importe quelle bibliothèque de Apache Commons ou de Google Code, pour que je puisse sélectionner tous les enregistrements dans ResultSet et obtenir 3 tableaux de groupes de données par champs différents Single ResultSet. Est-ce qu'il me manque une solution évidente et inattendue à ce problème?

Répondre

1

Si votre base de données prend en charge une vue matérialisée et des vues indexées, vous pouvez obtenir des performances significatives en préagrégeant les valeurs dans la vue et en utilisant un index pour extraire les valeurs très rapidement.

Vous créez essentiellement une vue matérialisée contenant les agrégations dont vous avez besoin, puis vous l'indexez. Vous pouvez vous y joindre ou simplement lui demander directement.

Basé sur vos données City (1st grid), by Population (2nd grid), by number of babies (3rd grid) Je ne pense pas que les frais généraux vont faire beaucoup de mal à INSERTS/UPDATES/DELETES.

+0

ce qui signifie pour chaque requête que j'ai besoin de créer vue, interroger la vue en utilisant le même SQL avec différents "grouper par", puis supprimer la vue? Le système de données est "en lecture seule", il n'y a pas d'insertions et de mises à jour, il suffit de le sélectionner. – kachanov

+0

non, créer une vue matérialisée 'CityView' qui est' SELECT City, agrégation (xyz) comme xyz FROM YourTable GROUP BY City', vous pouvez alors 'SELECT * FROM CityView WHERE ...' et le résultat sera beaucoup plus rapide que avant. fais ceci pour chacun. Si cela n'est pas possible, vous devez en expliquer davantage sur votre situation, donner les colonnes dans le tableau, et combien de choses différentes vous regroupez, quels index vous avez, quelle base de données vous utilisez. –

+0

hm, merci pour le conseil. Si vous voulez en savoir plus sur les vues – kachanov