Since we're just in the progress of getting V3 finished to Gold status, we've been looking into tweaking the engine. In this process we were wondering how V3 actually measures up to older versions of NexusDB. We've also included NexusDB V2.08, which is imminent at the time of writing this.
As representative mix of data we simply chose the current core SQL tests. These are the tests that are run after every single fix/change to the SQL engine as well as automated every night. All tests are run on Delphi 2007, with NexusDB V3 also run on Delphi 2009. This core suite consists of 184 tests which have a run time from less than 5ms up to 65 seconds (set as timeout). The queries cover the whole range from simple queries, to aggregates, to inner/outer joins, inserts, updates and triggers. 50 of these queries have a run time above 50ms in NexusDB V3 on D2009, and after trending all the data we can confirm that these 50 are representative for the whole suite.
The following chart shows the run time of these queries normalized to the longest running time as 100% - thus the shorter the bar, the better :)
If you want to see the table with the timings in ms then please scroll further down.
If you don't see a bar on the graph for a version (or a -1 in the table) then this means that either the returned result was wrong, the query produced a parser or runtime error or the query timed out.
Of course we're trying to hunt down the few cases where any V2 outperforms V3 and fix that up before release, after all we want V3 to be the best we have in all areas.
Looking at the chart, overall I think I can say to the team: "We've done good boys!"
And here's the base data for the chart, a green background indicating that this is the fastest run time:
As representative mix of data we simply chose the current core SQL tests. These are the tests that are run after every single fix/change to the SQL engine as well as automated every night. All tests are run on Delphi 2007, with NexusDB V3 also run on Delphi 2009. This core suite consists of 184 tests which have a run time from less than 5ms up to 65 seconds (set as timeout). The queries cover the whole range from simple queries, to aggregates, to inner/outer joins, inserts, updates and triggers. 50 of these queries have a run time above 50ms in NexusDB V3 on D2009, and after trending all the data we can confirm that these 50 are representative for the whole suite.
The following chart shows the run time of these queries normalized to the longest running time as 100% - thus the shorter the bar, the better :)
If you want to see the table with the timings in ms then please scroll further down.
If you don't see a bar on the graph for a version (or a -1 in the table) then this means that either the returned result was wrong, the query produced a parser or runtime error or the query timed out.
Of course we're trying to hunt down the few cases where any V2 outperforms V3 and fix that up before release, after all we want V3 to be the best we have in all areas.
Looking at the chart, overall I think I can say to the team: "We've done good boys!"

And here's the base data for the chart, a green background indicating that this is the fastest run time:
SQL | V3 (D2007) | V3 (D2009) | V3 (D2009) no stringcheck |
V 2.08 | V2.07.06 | V2.05 |
0050.sql | 93 | 109 | 94 | 110 | -1 | -1 |
0069.sql | 561 | 468 | 468 | 670 | -1 | -1 |
0075.sql | 967 | 999 | 983 | 3192 | -1 | -1 |
0089.sql | 78 | 62 | 78 | -1 | -1 | -1 |
2022.sql | 1030 | 1108 | 1108 | 1304 | 1357 | 1778 |
2093.sql | 62 | 63 | 62 | 78 | 78 | 62 |
2099.sql | 109 | 94 | 94 | 105 | 110 | 171 |
2106.sql | 1825 | 2028 | 1887 | -1 | -1 | 2839 |
2131.sql | 2262 | 2559 | 2590 | 2808 | 2840 | 10405 |
2138.sql | 4899 | 5195 | 4742 | 5959 | 6677 | -1 |
2139.sql | 45428 | 54273 | 45318 | 58953 | 61168 | -1 |
2140.sql | 234 | 47 | 47 | 47 | 47 | -1 |
2151.sql | 203 | 234 | 203 | 249 | 234 | 640 |
2159.sql | 4555 | 5070 | 4586 | 5688 | 5756 | -1 |
2162.sql | 4883 | 5226 | 4836 | 6302 | 6411 | 13635 |
2162_2.sql | 4414 | 4633 | 4321 | 5117 | 5211 | 7567 |
2162_3.sql | 4508 | 4758 | 4258 | 5273 | 5445 | 8330 |
2162_4.sql | 2559 | 2777 | 2481 | 2924 | 2964 | 5101 |
2162_5.sql | 156 | 156 | 141 | 171 | 188 | -1 |
2172.sql | 62 | 78 | 63 | 63 | 62 | -1 |
2176.sql | 1825 | 1981 | 1950 | 2449 | 2605 | 1982 |
2178.sql | 375 | 390 | 390 | 453 | 421 | 639 |
2179.sql | 94 | 93 | 94 | 94 | 93 | -1 |
2180.sql | 343 | 328 | 327 | 406 | 406 | 874 |
2194.sql | 1280 | 1420 | 1373 | 1585 | 1653 | 2012 |
2234.sql | 124 | 125 | 125 | 125 | 141 | -1 |
2237.sql | 78 | 78 | 78 | 93 | 94 | -1 |
2252.sql | 827 | 874 | 843 | 858 | 858 | 956 |
2257.sql | 218 | 234 | 234 | 296 | 296 | 1155 |
2283.sql | 18221 | 18814 | 18361 | 21997 | 22168 | -1 |
2310.sql | 671 | 764 | 702 | 749 | 749 | 5335 |
2317.sql | 452 | 453 | 437 | 499 | 530 | 1950 |
2143_2.sql | 3261 | 3541 | 3401 | 3853 | 3931 | 9157 |
2389.sql | 140 | 140 | 156 | 172 | 187 | -1 |
2148.sql | 15600 | 16583 | 16365 | 17492 | 18985 | -1 |
2443.sql | 515 | 452 | 437 | 577 | 578 | 1576 |
2451.sql | 936 | 999 | 1045 | 1342 | 1341 | -1 |
2470.sql | 7800 | 8097 | 8299 | 9254 | 9173 | -1 |
2503.sql | 19282 | 22495 | 20296 | 23275 | 23696 | 35054 |
2546.sql | 125 | 109 | 125 | 125 | 124 | -1 |
2554.sql | 219 | 219 | 218 | 234 | 234 | -1 |
2564.sql | 109 | 78 | 93 | 109 | 110 | 78 |
2569.sql | 78 | 78 | 94 | 93 | 93 | 94 |
2572.sql | 436 | 468 | 468 | 539 | 531 | -1 |
2577.sql | 78 | 94 | 78 | 78 | 78 | -1 |
2584.sql | 4898 | 5086 | 5241 | 5631 | 5725 | -1 |
pt1.sql | 3338 | 3650 | 3479 | 3981 | 4009 | -1 |
AppendixB_Q1.sql | 2324 | 2574 | 2605 | 2839 | 2855 | 10452 |
AppendixB_Q11.sql | 1763 | 1919 | 1810 | 2121 | 2168 | -1 |
AppendixB_Q13.sql | 328 | 327 | 359 | 390 | 390 | 530 |
AppendixB_Q3.sql | 63 | 62 | 78 | 94 | 78 | 2761 |
AppendixB_Q5.sql | 624 | 671 | 655 | 733 | 733 | 1092 |
AppendixB_Q7.sql | 624 | 624 | 686 | 748 | 749 | 1216 |
AppendixB_Q9.sql | 593 | 624 | 656 | 749 | 733 | 1326 |
in_exists_test.sql | 1701 | 1826 | 1856 | 2122 | 2200 | 30249 |