T
Tom Ellison
Dear friends:
A client reports a problem with an Access MDB file. It contains one table
and nothing else.
"its size is 2.095GB."
The problem is that when he tries to Compact and Repair it, he gets an error
message:
'Invalid argument'.
If he tries to delete one row from the table, he gets the same error
message.
What I propose to do is to query the table and import it in pieces into a
new SQL Express table. Using more efficient datatypes (smallmoney instead
of doubles) and given the Express 4 GB limit, this should work well. To
keep within the 5 minute Access timeouts for SQL queries, I have used
filters to break the process into multiple parts. Probably due to
fragmentation of the files on his drive, this hasn't been effective. (It
works well in tests here, with no single query taking more than 2 1/2
minutes. But my hard drive is severly defragmented!)
What he wants to do is to manually separate the file into smaller pieces,
but this isn't working out. I want to do that inside the queries that
import the data, but have advised him to defragment his hard drive using
PerfectDisk first. He's going to need a clean import anyway, and this is
easier to provide before importing (in my opinion). What I'm asking for is
a "second opinion" so everybody chime in, please.
Performance of the database in queries afterward is the actual issue of the
project. The optimal column on which to perform a physical sorting of the
rows (as in a primary key for Jet or a clustered index for Express) is not
unique, which rules out a PK in Jet. The clustered index approach works
superbly, with an increase in performance beyond your wildest dreams. I
propose that such a solution makes proper defragmenting all the more
essential, hence my recommendation for PerfectDisk.
Please offer any critical opinions of my approach and any alternatives you
think are viable. I will direct him to read this thread, so pick my ideas
apart.
Thanks,
Tom Ellison
A client reports a problem with an Access MDB file. It contains one table
and nothing else.
"its size is 2.095GB."
The problem is that when he tries to Compact and Repair it, he gets an error
message:
'Invalid argument'.
If he tries to delete one row from the table, he gets the same error
message.
What I propose to do is to query the table and import it in pieces into a
new SQL Express table. Using more efficient datatypes (smallmoney instead
of doubles) and given the Express 4 GB limit, this should work well. To
keep within the 5 minute Access timeouts for SQL queries, I have used
filters to break the process into multiple parts. Probably due to
fragmentation of the files on his drive, this hasn't been effective. (It
works well in tests here, with no single query taking more than 2 1/2
minutes. But my hard drive is severly defragmented!)
What he wants to do is to manually separate the file into smaller pieces,
but this isn't working out. I want to do that inside the queries that
import the data, but have advised him to defragment his hard drive using
PerfectDisk first. He's going to need a clean import anyway, and this is
easier to provide before importing (in my opinion). What I'm asking for is
a "second opinion" so everybody chime in, please.
Performance of the database in queries afterward is the actual issue of the
project. The optimal column on which to perform a physical sorting of the
rows (as in a primary key for Jet or a clustered index for Express) is not
unique, which rules out a PK in Jet. The clustered index approach works
superbly, with an increase in performance beyond your wildest dreams. I
propose that such a solution makes proper defragmenting all the more
essential, hence my recommendation for PerfectDisk.
Please offer any critical opinions of my approach and any alternatives you
think are viable. I will direct him to read this thread, so pick my ideas
apart.
Thanks,
Tom Ellison