Reading "Ingres 2006 Connectivity Guide", I've found next explanation: quote:The presence of a BLOB column in a result set places limitations on the Ingres JDBC Driver and JDBC application. BLOB data is serialized with the rest of the result set when returned by the DBMS Server. The length of a BLOB is not known beforehand, and the Ingres JDBC Driver does not attempt to buffer BLOB data. As a result, a BLOB column must be accessed and processed prior to accessing any data that follow the BLOB. A result set containing a BLOB column does not permit READONLY cursor pre-fetch. Only one row of a BLOB result set is retrieved with each DBMS Server access. While this does not directly affect the JDBC application, performance is reduced when a result set contains a BLOB column.Knowing slow performance of query returning sql server text data, i guess it is the same reason for such poor performance (besides potentially much larger row) regardless of access method used.