ADO Database Delphi

Title: Paradox vs Microsoft Access
Question: This test is to compare various database operations performance on Paradox and Microsoft Access database. I did the testing is I want to know how far can these xbase database go. The test result affects my decision on choosing which database to deploy for my applications.
Answer:
Author's comments
This is my personal opinion. It is not an absolute answer or solution
for these two databases.
I used Paradox + BDE for about 5 years. It works fine for a single
machine. Although the database get corrupted and index out of date once a
while, my customers still accept the errors and make no complaints.
As network setup cost keep sliding in these few years, some customers start
expands their businesses. They don't satisfy with the standalone model
applications. Instead, networking is the only answer for them. To
minimize the impact on changing my software's design, I configure my customers
applications to work under networking environment by just doing a minor
adjustment. It works for a day on two. As the work load keep
increasing, the index out of date error keep happen. Sometime, it happen
so often until my customers lost confident on my applications.
If deploy the database under Windows NT platform, turn off the opportunistic
lock may reduce the frequency of index out of date. This does help but
user has to turn it off by manually. This is not an easy task for users
who do not know how to manage NT. Moreover, installing BDE or distribute BDE
increase our burden. Most Windows machine do not equip with BDE by
default.
This has forced me to find a new database to substitute Paradox + BDE.
I found that Microsoft Access is the most common database under Windows
platform. Most of my customers' machine has Microsoft Office
installed. Using Access as the database and MDAC as the database engine
soon become my first choice. The MDAC, as stated by Microsoft, will be a
standard in Windows platform. MDAC is widely available for Windows 2000
platform. Thus, deploying applications using Access and MDAC should be
fairly simple and straight forward.
Before I dump my effort to re-design my application model, I study ADO and
MDAC, I do this test to examine the ability of both databases. I just
can't afford for choosing an inappropriate technology for my applications.
By just doing half of the test, I already has a clue. I am going to use
MS-Access for my future applications. Microsoft Access's transaction
capability is out of my expectation and perform excellently well compare with
Paradox. I am able to rollback more than 10,000 modifications on Access
database whereas Paradox can only rollback 300+ modifications. Moreover, A
single file per Microsoft Access database makes distribution and backup
easy.
Test Environment
Linux Machine
Pentium Pro 200MHz with 64M RAMLinux Kernel Version: 2.2.5-15Samba
version: samba-2.0.6-19991110Hard disk: IBM-DPTA-372050 19574MB w/1961KB
Cache
Windows 95 Machine
Pentium 133Mhz with 32M RAMHard disk: 2.1GB Quantum Fireball
Local machine
AMD K6-2, 450Mhz with 64M RAMOS: Windows NT Wosktation 4 with Service
Pack 5 installedHard disk: 6.4Gb Quantum Fireball CX1
Network configuration
10Mbps, when doing testing, only client and server machines are working.
Database EngineParadox: BDE version 5.10, Paradox Driver Version 4.0
Table Level 7Microsoft Access: Microsoft Access 2000 database. Engine
version: Microsoft DAO 3.6 Object Library DBEngine
Access - LocalApplication access Microsoft Access database stored in local
machine.
Paradox - LocalApplication access local Paradox database stored in local
machine.
Access - Network(Samba)Application access Microsoft Access database
stored in Samba
server.
Paradox - Network(Samba)Application access Paradox database stored in
Samba
server.
Access - Network(Win95)Application access Microsoft Acess database
stored in Windows
95 machine.
Paradox - Network(Win95)Application access Paradox database stored in
Windows
95 machine.
Test Result
Due to time constraint, I did 9 test cases only:
Case 1:
Edit Record
Case 2:
Insert Record (w/ Primary Key)
Case 3:
Insert Record (w/o Primary Key)
Case 4:
SQL Delete w/ Primary Key
Case 5:
SQL Delete w/o Primary Key
Case 6:
SQL Join
Case 7:
SQL Record Count
Case 8:
SQL Select
Case 9:
SQL Update
Case 1: Edit Record











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:00
0:00:01
0:00:02
0:00:02

1000
0:00:01
0:00:01
0:00:00
0:00:02
0:00:03
0:00:05

1500
0:00:01
0:00:01
0:00:00
0:00:02
0:00:04
0:00:06

2000
0:00:01
0:00:01
0:00:00
0:00:03
0:00:06
0:00:10

3000
0:00:02
0:00:09
0:00:00
0:00:05
0:00:10
0:00:13

4000
0:00:04
0:00:10
0:00:01
0:00:06
0:00:14
0:00:15

5000
0:00:05
0:00:11
0:00:01
0:00:08
0:00:18
0:00:49

6000
0:00:07
0:00:18
0:00:01
0:00:10
0:00:22
0:00:24

7000
0:00:09
0:00:22
0:00:01
0:00:18
0:00:27
0:00:32

8000
0:00:11
0:00:26
0:00:21
0:00:13
0:00:32
0:00:33

9000
0:00:14
0:00:31
0:00:21
0:00:14
0:00:36
0:00:41

10000
0:00:16
0:00:31
0:00:36
0:00:17
0:00:41
0:00:44
Case 2: Insert Record (w/ Primary Key)











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:09
0:00:09
0:00:02
0:00:06
0:01:23
0:00:41

1000
0:00:16
0:00:16
0:00:03
0:00:11
0:02:48
0:01:19

1500
0:00:24
0:00:24
0:00:06
0:00:13
0:04:19
0:01:53

2000
0:00:33
0:00:34
0:00:10
0:00:21
0:05:58
0:02:31

3000
0:00:51
0:00:58
0:00:44
0:00:30
0:09:55
0:03:45

4000
0:01:07
0:01:08
0:00:56
0:00:38
0:14:00
0:05:12

5000
0:01:24
0:01:35
0:01:00
0:00:49
0:16:04
0:06:15

6000
0:01:43
0:01:57
0:01:13
0:00:54
0:19:12
0:07:32

7000
0:02:00
0:02:32
0:01:25
0:01:04
0:23:38
0:08:48

8000
0:02:23
0:03:08
0:01:33
0:01:14
0:25:50
0:10:05

9000
0:02:38
0:03:21
0:01:49
0:01:21
0:29:09
0:11:13

10000
0:02:52
0:03:29
0:02:02
0:01:31
0:32:24
0:12:44
Case 3: Insert Record (w/o Primary Key)











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:07
0:00:06
0:00:00
0:00:01
0:00:45
0:00:08

1000
0:00:13
0:00:12
0:00:00
0:00:02
0:01:34
0:00:14

1500
0:00:22
0:00:18
0:00:01
0:00:03
0:02:16
0:00:20

2000
0:00:29
0:00:25
0:00:01
0:00:03
0:03:07
0:00:26

3000
0:00:41
0:00:39
0:00:10
0:00:05
0:04:51
0:00:52

4000
0:00:54
0:00:51
0:00:11
0:00:07
0:06:25
0:00:52

5000
0:01:14
0:01:05
0:00:13
0:00:08
0:08:04
0:01:06

6000
0:01:24
0:01:22
0:00:16
0:00:13
0:09:22
0:01:20

7000
0:01:40
0:01:33
0:00:18
0:00:14
0:11:08
0:01:33

8000
0:01:56
0:01:49
0:00:28
0:00:17
0:12:34
0:01:46

9000
0:02:10
0:02:05
0:00:32
0:00:18
0:14:10
0:02:01

10000
0:02:27
0:02:24
0:00:36
0:00:20
0:15:51
0:02:11
Case 4: SQL Delete w/ Primary Key











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:00
0:00:01
0:00:00
0:00:32

1000
0:00:00
0:00:00
0:00:01
0:00:01
0:00:00
0:01:05

1500
0:00:00
0:00:00
0:00:02
0:00:02
0:00:00
0:01:30

2000
0:00:00
0:00:00
0:00:02
0:00:02
0:00:00
0:01:59

3000
0:00:00
0:00:00
0:00:04
0:00:04
0:00:00
0:03:16

4000
0:00:00
0:00:00
0:00:05
0:00:12
0:00:00
0:04:01

5000
0:00:00
0:00:00
0:00:07
0:00:14
0:00:00
0:05:07

6000
0:00:00
0:00:00
0:00:14
0:00:21
0:00:00
0:06:17

7000
0:00:00
0:00:00
0:00:17
0:00:27
0:00:00
0:07:08

8000
0:00:00
0:00:00
0:00:24
0:00:35
0:00:00
0:08:05

9000
0:00:00
0:00:00
0:00:36
0:00:42
0:00:00
0:09:03

10000
0:00:00
0:00:00
0:01:08
0:00:54
0:00:00
0:10:16
Case 5: SQL Delete w/o Primary Key











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:07

1000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:13

1500
0:00:00
0:00:00
0:00:01
0:00:01
0:00:00
0:00:21

2000
0:00:00
0:00:00
0:00:01
0:00:01
0:00:00
0:00:26

3000
0:00:00
0:00:00
0:00:01
0:00:01
0:00:00
0:00:41

4000
0:00:00
0:00:00
0:00:02
0:00:02
0:00:00
0:00:53

5000
0:00:00
0:00:00
0:00:02
0:00:02
0:00:00
0:01:07

6000
0:00:00
0:00:00
0:00:03
0:00:03
0:00:00
0:01:24

7000
0:00:00
0:00:00
0:00:03
0:00:03
0:00:00
0:01:34

8000
0:00:00
0:00:00
0:00:06
0:00:06
0:00:00
0:01:47

9000
0:00:00
0:00:00
0:00:35
0:00:09
0:00:00
0:02:01

10000
0:00:00
0:00:00
0:00:43
0:00:14
0:00:00
0:02:15
Case 6: SQL Join











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:02
0:00:02
0:00:00
0:00:06

1000
0:00:01
0:00:01
0:00:04
0:00:05
0:00:01
0:00:10

1500
0:00:01
0:00:01
0:00:06
0:00:08
0:00:01
0:00:15

2000
0:00:02
0:00:02
0:00:08
0:00:11
0:00:03
0:00:21

3000
0:00:03
0:00:04
0:00:12
0:00:17
0:00:07
0:00:31

4000
0:00:04
0:00:05
0:00:17
0:00:23
0:00:10
0:00:39

5000
0:00:05
0:00:05
0:00:38
0:00:30
0:00:12
0:00:48

6000
0:00:08
0:00:06
0:00:48
0:00:36
0:00:15
0:01:00

7000
0:00:13
0:00:08
0:00:42
0:00:43
0:00:18
0:01:07

8000
0:00:20
0:00:11
0:00:52
0:00:48
0:00:22
0:01:18

9000
0:00:43
0:00:17
0:01:29
0:00:57
0:00:34
0:01:29

10000
0:00:35
0:00:20
0:01:44
0:01:04
0:00:39
0:01:56
Case 7: SQL Record Count











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:00
0:00:01
0:00:00
0:00:01

1000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:02

1500
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:03

2000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:05

3000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:06

4000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:06

5000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:12

6000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:10

7000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:16

8000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:14

9000
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:20

10000
0:00:00
0:00:00
0:00:07
0:00:02
0:00:00
0:00:18
Case 8: SQL Select











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:01
0:00:01
0:00:00
0:00:01
0:00:01
0:00:01

1000
0:00:01
0:00:01
0:00:00
0:00:01
0:00:01
0:00:01

1500
0:00:02
0:00:02
0:00:01
0:00:01
0:00:02
0:00:02

2000
0:00:02
0:00:02
0:00:01
0:00:02
0:00:03
0:00:02

3000
0:00:03
0:00:04
0:00:02
0:00:03
0:00:05
0:00:03

4000
0:00:04
0:00:05
0:00:03
0:00:03
0:00:06
0:00:04

5000
0:00:06
0:00:06
0:00:04
0:00:04
0:00:07
0:00:05

6000
0:00:07
0:00:08
0:00:04
0:00:05
0:00:09
0:00:06

7000
0:00:08
0:00:09
0:00:06
0:00:06
0:00:11
0:00:08

8000
0:00:10
0:00:11
0:00:06
0:00:07
0:00:12
0:00:08

9000
0:00:11
0:00:12
0:00:07
0:00:08
0:00:14
0:00:09

10000
0:00:13
0:00:14
0:00:09
0:00:10
0:00:16
0:00:11
Case 9: SQL Update











Access Local
Access Network (Samba)
Paradox Local
Paradox Network (Samba)
Access Network (Win95)
Paradox Network (Win95)

500
0:00:00
0:00:00
0:00:00
0:00:01
0:00:01
0:00:09

1000
0:00:00
0:00:00
0:00:00
0:00:02
0:00:01
0:00:15

1500
0:00:00
0:00:00
0:00:01
0:00:03
0:00:02
0:00:23

2000
0:00:00
0:00:00
0:00:01
0:00:04
0:00:03
0:00:31

3000
0:00:01
0:00:01
0:00:01
0:00:05
0:00:06
0:00:46

4000
0:00:01
0:00:01
0:00:02
0:00:08
0:00:09
0:00:56

5000
0:00:01
0:00:01
0:00:04
0:00:14
0:00:13
0:01:15

6000
0:00:01
0:00:01
0:00:13
0:00:19
0:00:15
0:01:26

7000
0:00:02
0:00:02
0:00:20
0:00:25
0:00:18
0:01:43

8000
0:00:02
0:00:02
0:00:32
0:00:28
0:00:19
0:01:56

9000
0:00:02
0:00:02
0:00:52
0:00:32
0:00:22
0:02:13

10000
0:00:03
0:00:02
0:01:30
0:00:39
0:00:25
0:02:27
Conclusion
In normal database activity, Insert, Edit and Delete operations are not as
heavy as SELECT and JOIN. Most Insert/Edit/Delete operation are done via form
entry which perform on a single row. Whereas SELECT and JOIN are heavy
operations for generating report and inquiry request. The result in case
6 shows that JOIN operation for Microsoft Access has significant different
compare with Paradox database. In case
8, Paradox did well in SELECT operation but with just few seconds
different.
The result gave me strong confident to deploy Microsoft Access datbase
solution to my customer.
This is the first time I did such testing, they may be things I didn't
consider and thus the result may not be accurate. Anyway, comments are welcome
for those testing.
AuthorChau Chee-YangE STREAM Software Sdn.
Bhd.Email: ccy@sql.com.my