jTDS JDBC Driver (original) (raw)
Home | FAQ | Documentation | Links | License | Project Info | Download | News | Bugs | Forums
i-net Software BenchTest 2.1 for MS SQL Server Results
These are the results of running i-net Software's BenchTest 2.1 for MS SQL Server. The tests were run against an SQL Server 2000 over a 100Mbit network connection. The client machine was an AMD Duron 900MHz with 512MB RAM (no idea about the server).
5 drivers were tested: i-net Merlia 6.0, Microsoft SQL Server Driver for JDBC SP2, JNetDirect JSQLConnect 3.3023, jTDS 0.7 and the JDBC-ODBC bridge bundled with J2RE 1.4.2-b28. All tests were run twice and the final result is the average of the two test runs.
Unfortunately, the license of NetDirect JSQLConnect does not allow any benchmarking results to be made public, but it has failed the CursorUpdate test and the results would not have affected the final standings too much. If you want some more exact results for JSQLConnect, download it and the i-net Software BenchTest and do the testing yourself. It's very easy.
Tests run with rowcount = 1000 | |||||
---|---|---|---|---|---|
i-net Merlia | MS | MS Cursor1 | jTDS | ODBC2 | |
UnpreparedInsert | 10927 | 10510 | 10395 | 10154 | 11114 |
DeleteAll | 215 | 986 | 651 | 591 | 1082 |
CursorInsertEmpty | 11215 | 11687 | 11777 | 11475 | 11225 |
CursorDelete | 10845 | 10745 | 10745 | 10395 | Failed |
CursorInsert | 17951 | 13419 | 13539 | 12273 | Failed |
CursorFetchPaged | 1242 | 8492 | 8412 | 2354 | Failed |
CursorUpdate | 16523 | 21680 | 13892 | 13518 | Failed |
PreparedUpdate | 13925 | 12659 | 13268 | 12097 | Failed |
PreparedUpdateWProc | 14099 | 13148 | 13149 | 10024 | Failed |
BatchPreparedUpdate | 4015 | 4107 | 4426 | 3425 | Failed |
ResultSetReadAllRows | 901 | 951 | 1002 | 401 | Failed |
PreparedBlobUpdate | 140 | 281 | 280 | 211 | Failed |
PreparedBlobUpdateWProc | 110 | Failed | 110 | 180 | Failed |
Tests run with rowcount = 100 | |||||
i-net Merlia | MS | MS Cursor1 | jTDS | ODBC2 | |
UnpreparedInsert | 916 | 931 | 981 | 952 | 901 |
DeleteAll | 30 | 20 | 20 | 30 | 20 |
CursorInsertEmpty | 972 | 1041 | 981 | 901 | 957 |
CursorDelete | 931 | 1152 | 1102 | 901 | Failed |
CursorInsert | 1953 | 1237 | 1351 | 1157 | Failed |
CursorFetchPaged | 370 | 1402 | 1272 | 510 | Failed |
CursorUpdate | 1778 | 2533 | 1732 | 1362 | Failed |
PreparedUpdate | 1382 | 1177 | 1051 | 962 | Failed |
PreparedUpdateWProc | 1132 | 1131 | 1132 | 871 | Failed |
BatchPreparedUpdate | 295 | 441 | 410 | 320 | Failed |
ResultSetReadAllRows | 70 | 151 | 131 | 75 | Failed |
PreparedBlobUpdate | 40 | 20 | 20 | 35 | Failed |
PreparedBlobUpdateWProc | 15 | Failed | 20 | 15 | Failed |
The tests explained
All tests use a table with an INT primary key and nullable columns of each SQL Server base type (about 20 in all). The rowcount is a parameter that determines the size of each test (number of rows inserted/updated/retrieved or Blob size).
- UnpreparedInsert - Insert rowcount rows with default values with a classic INSERT using a plain statement.
- DeleteAll - Delete all rows with a single statement ('DELETE FROM Table'). Not very relevant, it only tests the server, that's why the results vary so wildly from the 1000 rows test to the 100 rows test.
- CursorInsertEmpty - Insert rowcount rows using insertRow() and without setting the value of any column.
- CursorDelete - Delete rowcount rows using deleteRow().
- CursorInsert - Insert rowcount rows with setting all columns (one column for each type supported by SQL Server, except TEXT/IMAGE).
- CursorFetchPaged - Create a scrollable ResultSet, set the fetch size to rowcount/100 and scroll through it. (jTDS doesn't "know" how to fetch more than one row of a cursor-based ResultSet at once yet, so it's somewhat slower than the i-net driver, but still a lot faster than the others.)
- CursorUpdate - Update rowcount rows using updateRow().
- PreparedUpdate - Update rowcount rows using a classic UPDATE with a PreparedStatement.
- PreparedUpdateWProc - Update rowcount rows using a stored procedure with a PreparedStatement.
- BatchPreparedUpdate - Update rowcount rows using a classic UPDATE with a PreparedStatement and executeBatch() in batches of 10 updates.
- ResultSetReadAllRows - Scroll through a scrollable ResultSet and call the getXXX() methods for each column.
- PreparedBlobUpdate - Update a Blob of rowcount KB using a classic UPDATE with a PreparedStatement.
- PreparedBlobUpdateWProc - Update a Blob of rowcount KB using a stored procedure with a PreparedStatement.
1 MS Cursor stands for the Microsoft driver with SelectMethod set to 'Cursor' (the other uses the default 'Direct' method).
2 The JDBC-ODBC bridge failed on the CursorDelete test and closed the connection causing the rest of the tests to also fail.