473,414 Members | 1,713 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,414 software developers and data experts.

In large db's, should Memo fields go to their own table?

ARC
This is mainly a speed question.

In this example: I have a QuotesHdr table that has a few memo fields. If
these memo fields are used extensively by some users, and if their are a
large number of records in QuotesHdr, should I break out the memo fields
into a separate table? The thinking here is that, for Quotes selection
dropdowns that display all entries in QuotesHdr for selection, I would think
that the entire record comes down over the network, and those who use the
memo fields would be the ones to notice speed issues.

It will be a fair amount of work to break out the memo fields into one
separate, and I'd like to have some opinions on this. I would think breaking
them out would have the affect of the data not coming down over the network
unless a quote is selected.

Many Thanks,

Andy
Aug 22 '07 #1
10 3024
Memo fields are stored separately from the table in which you "see" them --
that is why, at times, they have been more "problematic" than other types of
field.

What, exactly, do you mean by "come down over the network"?

If you have a split front and back end, properly indexed, and select by
indexed fields (which, by definition, are not Memo type), then only the
index is retrieved over the network to select the desired record, so only
the Memo fields associated with the current record of interest will "come
down over the network".

If you are displaying an entire table's or query's worth of data in a
continuous view form for the user to select in a front-back end environment,
you need to reexamine your application's design.

Separating the memo fields into another table is likely not going to help as
much as you might think.

Larry Linson
Microsoft Access MVP

"ARC" <an**@andyc.comwrote in message
news:eS****************@nlpi068.nbdc.sbc.com...
This is mainly a speed question.

In this example: I have a QuotesHdr table that has a few memo fields. If
these memo fields are used extensively by some users, and if their are a
large number of records in QuotesHdr, should I break out the memo fields
into a separate table? The thinking here is that, for Quotes selection
dropdowns that display all entries in QuotesHdr for selection, I would
think that the entire record comes down over the network, and those who
use the memo fields would be the ones to notice speed issues.

It will be a fair amount of work to break out the memo fields into one
separate, and I'd like to have some opinions on this. I would think
breaking them out would have the affect of the data not coming down over
the network unless a quote is selected.

Many Thanks,

Andy

Aug 22 '07 #2
ARC
By coming down over the network, I meant sending the entire record of data,
including the memo fields, accross the network wire to the user's pc. So if
my lookup combo box does contain all quotes, and is sorted on the indexed
field, quote number, and contains quote description, date, and customer
name, then it sounds like the memo field would not be retrieved unless the
quote is actually selected.

Many thanks,

"Larry Linson" <bo*****@localhost.notwrote in message
news:ho%yi.15497$4K6.10684@trnddc02...
Memo fields are stored separately from the table in which you "see"
them -- that is why, at times, they have been more "problematic" than
other types of field.

What, exactly, do you mean by "come down over the network"?

If you have a split front and back end, properly indexed, and select by
indexed fields (which, by definition, are not Memo type), then only the
index is retrieved over the network to select the desired record, so only
the Memo fields associated with the current record of interest will "come
down over the network".

If you are displaying an entire table's or query's worth of data in a
continuous view form for the user to select in a front-back end
environment, you need to reexamine your application's design.

Separating the memo fields into another table is likely not going to help
as much as you might think.

Larry Linson
Microsoft Access MVP

"ARC" <an**@andyc.comwrote in message
news:eS****************@nlpi068.nbdc.sbc.com...
>This is mainly a speed question.

In this example: I have a QuotesHdr table that has a few memo fields. If
these memo fields are used extensively by some users, and if their are a
large number of records in QuotesHdr, should I break out the memo fields
into a separate table? The thinking here is that, for Quotes selection
dropdowns that display all entries in QuotesHdr for selection, I would
think that the entire record comes down over the network, and those who
use the memo fields would be the ones to notice speed issues.

It will be a fair amount of work to break out the memo fields into one
separate, and I'd like to have some opinions on this. I would think
breaking them out would have the affect of the data not coming down over
the network unless a quote is selected.

Many Thanks,

Andy


Aug 22 '07 #3
"ARC" <an**@andyc.comwrote in message
news:A1***************@newssvr21.news.prodigy.net. ..
By coming down over the network, I meant sending
the entire record of data, including the memo fields,
accross the network wire to the user's pc. So if my
lookup combo box does contain all quotes, and is
sorted on the indexed field, quote number, and contains
quote description, date, and customer name, then it
sounds like the memo field would not be retrieved
unless the quote is actually selected.
Because Access-Jet is a file-server database, all the data retrieval and
manipulation is done on the user's machine. The remote MDB is accessed just
as it would be on the local hard drive -- not everything is brought across
the network, but no (repeat NO) code is executed on the server where the
split DB resides. So the actual information displayed in the Combo Box won't
be extracted from the record until the record is retrieved. I believe that
will include the Memo fields, which then just won't be used.

The details of the workings of the Jet engine are not published by
Microsoft -- there was one book, a few years back, on the subject, by Dan
Haught of FMS, Inc.. It has been out of print for some time, and covers an
earlier version of Jet (but I believe most of the information still
applies). I recently tried to purchase a used copy, but it wasn't
delivered, I got a refund, and haven't pursued it beyond that.

If you can get the value for the indexed field without bringing the
additional information to the Combo, then using that in the Query that is
RecordSource for the Form would only bring the index itself across the
network, and then read just the Record of interest from the back end. If
that information is frequently updated, and the user needs the unindexed
fields, it may be that your idea of a separate table for Memos would,
indeed, improve performance. That is, make the base Record contain just the
information you need for the Combo, and link a one-to-one related table in
the Query you construct for the Form or Report's RecordSource.

Larry Linson
Microsoft Access MVP

Larry Linson
Microsoft Access MVP
Aug 22 '07 #4
ARC
Hope you find your book!

I guess the only real way to know for sure is to break out the old
stopwatch, and use a network of at least 2 pc's. Create a very large
quoteshdr table, with tons of notes in memo fields, then put the db on a 2nd
computer, and pull from the first (with both computers logged onto the db).
"Larry Linson" <bo*****@localhost.notwrote in message
news:LI0zi.12710$A57.12500@trnddc04...
"ARC" <an**@andyc.comwrote in message
news:A1***************@newssvr21.news.prodigy.net. ..
By coming down over the network, I meant sending
the entire record of data, including the memo fields,
accross the network wire to the user's pc. So if my
lookup combo box does contain all quotes, and is
sorted on the indexed field, quote number, and contains
quote description, date, and customer name, then it
sounds like the memo field would not be retrieved
unless the quote is actually selected.

Because Access-Jet is a file-server database, all the data retrieval and
manipulation is done on the user's machine. The remote MDB is accessed
just as it would be on the local hard drive -- not everything is brought
across the network, but no (repeat NO) code is executed on the server
where the split DB resides. So the actual information displayed in the
Combo Box won't be extracted from the record until the record is
retrieved. I believe that will include the Memo fields, which then just
won't be used.

The details of the workings of the Jet engine are not published by
Microsoft -- there was one book, a few years back, on the subject, by Dan
Haught of FMS, Inc.. It has been out of print for some time, and covers
an earlier version of Jet (but I believe most of the information still
applies). I recently tried to purchase a used copy, but it wasn't
delivered, I got a refund, and haven't pursued it beyond that.

If you can get the value for the indexed field without bringing the
additional information to the Combo, then using that in the Query that is
RecordSource for the Form would only bring the index itself across the
network, and then read just the Record of interest from the back end. If
that information is frequently updated, and the user needs the unindexed
fields, it may be that your idea of a separate table for Memos would,
indeed, improve performance. That is, make the base Record contain just
the information you need for the Combo, and link a one-to-one related
table in the Query you construct for the Form or Report's RecordSource.

Larry Linson
Microsoft Access MVP

Larry Linson
Microsoft Access MVP


Aug 22 '07 #5
ARC
Ooops, I should have said take time trials of a few thousdand records in a
QuotesHdr table with AND without data in the memo fields. 3 time trials of
each should do it.

"Larry Linson" <bo*****@localhost.notwrote in message
news:LI0zi.12710$A57.12500@trnddc04...
"ARC" <an**@andyc.comwrote in message
news:A1***************@newssvr21.news.prodigy.net. ..
By coming down over the network, I meant sending
the entire record of data, including the memo fields,
accross the network wire to the user's pc. So if my
lookup combo box does contain all quotes, and is
sorted on the indexed field, quote number, and contains
quote description, date, and customer name, then it
sounds like the memo field would not be retrieved
unless the quote is actually selected.

Because Access-Jet is a file-server database, all the data retrieval and
manipulation is done on the user's machine. The remote MDB is accessed
just as it would be on the local hard drive -- not everything is brought
across the network, but no (repeat NO) code is executed on the server
where the split DB resides. So the actual information displayed in the
Combo Box won't be extracted from the record until the record is
retrieved. I believe that will include the Memo fields, which then just
won't be used.

The details of the workings of the Jet engine are not published by
Microsoft -- there was one book, a few years back, on the subject, by Dan
Haught of FMS, Inc.. It has been out of print for some time, and covers
an earlier version of Jet (but I believe most of the information still
applies). I recently tried to purchase a used copy, but it wasn't
delivered, I got a refund, and haven't pursued it beyond that.

If you can get the value for the indexed field without bringing the
additional information to the Combo, then using that in the Query that is
RecordSource for the Form would only bring the index itself across the
network, and then read just the Record of interest from the back end. If
that information is frequently updated, and the user needs the unindexed
fields, it may be that your idea of a separate table for Memos would,
indeed, improve performance. That is, make the base Record contain just
the information you need for the Combo, and link a one-to-one related
table in the Query you construct for the Form or Report's RecordSource.

Larry Linson
Microsoft Access MVP

Larry Linson
Microsoft Access MVP


Aug 22 '07 #6
"ARC" <an**@andyc.comwrote in
news:eS****************@nlpi068.nbdc.sbc.com:
It will be a fair amount of work to break out the memo fields into
one separate, and I'd like to have some opinions on this. I would
think breaking them out would have the affect of the data not
coming down over the network unless a quote is selected.
I'm with Larry on seeing this as a non-issue -- it's not the way Jet
works.

However, I *do* recommend considering splitting memo fields out into
separate tables, either 1:1 or 1:N. There are two basic
justifications here, each being a separate kind of situation:

1. if a memo field is being used as a log where new data is appended
on a regular basis (often with a date stamp), it's a no-brainer,
particularly if multiple people could be trying to edit it at the
same time. In that case, each of those entires in the omnibus memo
field should be it's on record in a 1:N table.

2. for regular memo fields *not* used as a log, it's just safer to
store them in a different table. When the memo pointer gets
corrupted, you have problems with the whole record. But if you move
the memos to a separate table, if a memo pointer gets corrupted, all
that's lost is the memo data -- you don't have to do any recovery to
recreate the rest of the parent record.

I also seriously suggest that all memo editing be done in unbound
textboxes, populated in the OnCurrent event, and written back to the
form's recordsource in the unbound control's AfterUpdate event.

But that might not be necessary with the separate table, as in
there's less fragility, and no contention for locks on the main
record.

--
David W. Fenton http://www.dfenton.com/
usenet at dfenton dot com http://www.dfenton.com/DFA/
Aug 23 '07 #7
"Larry Linson" <bo*****@localhost.notwrote in
news:LI0zi.12710$A57.12500@trnddc04:
the actual information displayed in the Combo Box won't
be extracted from the record until the record is retrieved. I
believe that will include the Memo fields, which then just won't
be used.
It sounds to me like he's displaying the memo field in the combo
box, and that means that all the memos for all the rows displayed in
the combo box *will* be retrieved, but only once each time the form
is opened. From then on, the records displayed in the combo box are
cached locally.

I worry about memo fields displayed in a combo box (sounds like a
mistaken data type), but I don't see it as much of a performance
issue -- there's only going to be a hit on the form open.

--
David W. Fenton http://www.dfenton.com/
usenet at dfenton dot com http://www.dfenton.com/DFA/
Aug 23 '07 #8
ARC
No, the memo fields are not part of the stored query of the combo box. Just
the Quote Number, Quote Date, Quote Description, Customer name, and Company
name. (2 tables: Customers and QuotesHdr)

"David W. Fenton" <XX*******@dfenton.com.invalidwrote in message
news:Xn**********************************@127.0.0. 1...
"Larry Linson" <bo*****@localhost.notwrote in
news:LI0zi.12710$A57.12500@trnddc04:
>the actual information displayed in the Combo Box won't
be extracted from the record until the record is retrieved. I
believe that will include the Memo fields, which then just won't
be used.

It sounds to me like he's displaying the memo field in the combo
box, and that means that all the memos for all the rows displayed in
the combo box *will* be retrieved, but only once each time the form
is opened. From then on, the records displayed in the combo box are
cached locally.

I worry about memo fields displayed in a combo box (sounds like a
mistaken data type), but I don't see it as much of a performance
issue -- there's only going to be a hit on the form open.

--
David W. Fenton http://www.dfenton.com/
usenet at dfenton dot com http://www.dfenton.com/DFA/

Aug 23 '07 #9
ARC
I thought of that as well. I've had countless support issues with memo
fields, and before the Jetcomp.exe utility and SR-2, it used to corrupt the
entire record. With jetcomp.exe, luckily, it would do a repair and write in:
####### in place of the corrupt memo field, so you would only lose the memo
text, and not the entire record.

Definetely another vote for a heavily used memo field to be in a separate
table.

"David W. Fenton" <XX*******@dfenton.com.invalidwrote in message
news:Xn**********************************@127.0.0. 1...
"ARC" <an**@andyc.comwrote in
news:eS****************@nlpi068.nbdc.sbc.com:
>It will be a fair amount of work to break out the memo fields into
one separate, and I'd like to have some opinions on this. I would
think breaking them out would have the affect of the data not
coming down over the network unless a quote is selected.

I'm with Larry on seeing this as a non-issue -- it's not the way Jet
works.

However, I *do* recommend considering splitting memo fields out into
separate tables, either 1:1 or 1:N. There are two basic
justifications here, each being a separate kind of situation:

1. if a memo field is being used as a log where new data is appended
on a regular basis (often with a date stamp), it's a no-brainer,
particularly if multiple people could be trying to edit it at the
same time. In that case, each of those entires in the omnibus memo
field should be it's on record in a 1:N table.

2. for regular memo fields *not* used as a log, it's just safer to
store them in a different table. When the memo pointer gets
corrupted, you have problems with the whole record. But if you move
the memos to a separate table, if a memo pointer gets corrupted, all
that's lost is the memo data -- you don't have to do any recovery to
recreate the rest of the parent record.

I also seriously suggest that all memo editing be done in unbound
textboxes, populated in the OnCurrent event, and written back to the
form's recordsource in the unbound control's AfterUpdate event.

But that might not be necessary with the separate table, as in
there's less fragility, and no contention for locks on the main
record.

--
David W. Fenton http://www.dfenton.com/
usenet at dfenton dot com http://www.dfenton.com/DFA/

Aug 23 '07 #10
"ARC" <an**@andyc.comwrote in
news:Rj*****************@newssvr25.news.prodigy.ne t:
No, the memo fields are not part of the stored query of the combo
box. Just the Quote Number, Quote Date, Quote Description,
Customer name, and Company name. (2 tables: Customers and
QuotesHdr)
Then they won't be pulled down until the record they belong to is
retrieved.

--
David W. Fenton http://www.dfenton.com/
usenet at dfenton dot com http://www.dfenton.com/DFA/
Aug 23 '07 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Jon Smyth | last post by:
I am trying to create a database programmatically using vb5 with the DAO 3.6 object. I'm using the following segment, but I'm not having any luck. I can't seen to find much help either. Any...
3
by: deathyam | last post by:
Hi, I have an Excel 97 app in which I'm using SQL INSERTs to insert data into an Access 97 database table. The table structure is as follows: VersionID (PK) (Long) MetricID (PK) (Long)...
0
by: Thomas Zimmermann | last post by:
Hi I have an Accesss 97 database that imports data from an Oracle database. Some of the text fileds in the oreacle database have a fileds size larger than 255 characters. If I just link the...
7
by: Ryker | last post by:
I have a form where "notes" are entered on an individual. Unfortunately, these notes are usually longer than the 255 characters allowed in a single text box. To get around this, I have three note...
9
by: sparks | last post by:
I have a table in 2003 that has 221 fields defined. I tried to add another variable and got this error. I was surprised when it didn't say too many fields defined. I look at the error...
17
by: Stubert | last post by:
I have a training module db that stores information about employees and what training they have carried our or need to carry out. One table in this database stores what training needs to be carried...
3
by: ARC | last post by:
I'm having trouble here with Access 2007 and connecting to a different database. The code below works great IF the previous back-end database connection is still present and you are trying to...
2
by: steph | last post by:
I have a table with 250 fields. Of course you are wondering why 250 fields... what could I possibly be storing in so many fields? I am using this table as a general import table for files that...
25
by: tekctrl | last post by:
Anyone: I have a simple MSAccess DB which was created from an old ASCII flatfile. It works fine except for something that just started happening. I'll enter info in a record, save the record,...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.