473,695 Members | 2,730 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

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 3051
Memo fields are stored separately from the table in which you "see" them --
that is why, at times, they have been more "problemati c" 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.com wrote in message
news:eS******** ********@nlpi06 8.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*****@localh ost.notwrote in message
news:ho%yi.1549 7$4K6.10684@trn ddc02...
Memo fields are stored separately from the table in which you "see"
them -- that is why, at times, they have been more "problemati c" 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.com wrote in message
news:eS******** ********@nlpi06 8.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.com wrote in message
news:A1******** *******@newssvr 21.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*****@localh ost.notwrote in message
news:LI0zi.1271 0$A57.12500@trn ddc04...
"ARC" <an**@andyc.com wrote in message
news:A1******** *******@newssvr 21.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*****@localh ost.notwrote in message
news:LI0zi.1271 0$A57.12500@trn ddc04...
"ARC" <an**@andyc.com wrote in message
news:A1******** *******@newssvr 21.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.com wrote in
news:eS******** ********@nlpi06 8.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*****@localh ost.notwrote in
news:LI0zi.1271 0$A57.12500@trn ddc04:
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*******@dfen ton.com.invalid wrote in message
news:Xn******** *************** ***********@127 .0.0.1...
"Larry Linson" <bo*****@localh ost.notwrote in
news:LI0zi.1271 0$A57.12500@trn ddc04:
>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*******@dfen ton.com.invalid wrote in message
news:Xn******** *************** ***********@127 .0.0.1...
"ARC" <an**@andyc.com wrote in
news:eS******** ********@nlpi06 8.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

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

Similar topics

3
8467
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 offerings here? Set db = CreateDatabase(dbFileName, dbLangGeneral, dbVersion30) db.Execute "CREATE TABLE Food_Table (Category Text(50), " & _ "Name Memo NOT NULL, " & _ "SoldState Text(50), " & _ "Packaging Memo , " & _ "Ingredients Memo, " & _
3
1960
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) MetricNumber (Double) MetricText (Memo)
0
1779
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 oracle tables to Access those large text fileds apprea in Access as memo fields. But when if I from VBA use a ODBC-direct connection to open a recordset on a table in Oracle I cannot read the content of the large text fields. If I try to assign the...
7
2020
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 boxes set up on the form (note1, note2, and note3). When one fills up, the user can tab to the next one and continue typing. This works but it is very cumbersome and sloppy. Is there an easier way?
9
14312
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 description and it says size greater than the largest permissible size of 2K. what value does this 2k refer to? if I do a size on the table it shows 1901.
17
3573
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 based on a job title. So if a cleaner joins the company we know that they need the sweeping up training and the mopping up training. I wasn't sure how to store this information but this is what i came up with and as you will see i have hit a...
3
3157
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 connect to a new location (ie: datapath variable below). However, if you remove or even rename the old database, then launch your program, the code fails on the mytable.refreshlink line with an error 3044. (Description of that error is: 'C:\pc
2
4765
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 vary based on user selections. The input files are CSVs and can number from 2 to 175 columns. Each field is usually able to fit into a Text field (< 255 characters) but every now and then a longer field creeps in. since I don't know in which column...
25
20554
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, and try to move to another record and get an Access error "Record is too large". The record is only half filled, with many empty fields. If I remove the added data or delete some older data, then it saves ok and works fine again. Whenever I'm...
0
8971
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
0
8817
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 protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
7651
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6484
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 presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5831
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 then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
4336
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
2994
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
2258
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
1970
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.