Y a-t-il un ordre par dans la requête ? 10 000 lignes, c'est beaucoup si elles doivent être triées.
De plus, la récupération du PK n'est pas un test équitable par rapport à la récupération du CLOB entier. Oracle stocke les lignes de la table avec probablement plusieurs dans un bloc, mais chacun des CLOB (s'ils sont> 4K) sera stocké hors ligne, chacun dans une série de blocs. Scanner la liste des PK va donc être rapide. De plus, il y a probablement un index sur le PK, donc Oracle peut simplement scanner rapidement les blocs d'index et même pas accéder à la table.
4 secondes semblent un peu élevées, mais c'est 2 Mo qui doivent pouvoir être lus à partir du disque et transportés sur le réseau vers votre programme Java. Le réseau pourrait être un problème. Si vous effectuez une trace SQL de la session, cela vous indiquera exactement où le temps est passé (lectures de disque ou réseau).