Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Carsten Pedersen

On 30-05-2013 09:27, Neil Tompkins wrote:

Hi,

I've created a Audit table which tracks any changed fields for multiple
tables.  In my Audit table I'm using a UUID for the primary key.  However I
need to have a reference back to the primary key(s) of the table audited.

At the moment I've a VARCHAR field which stores primary keys like

1
1|2013-05-29
2|2013-05-29
2
3
1|2|2
etc

Is this the best approach, or should I have a individual field in the audit
table for all primary keys.  At the moment I think the max number of
primary keys on any given table is 3

Thanks
Neil



First you need to ask yourself how you expect to use the table in the 
future. Will you be looking up the data on a regular basis? Or will 
lookups only be something you will do in exceptional situtions?


What is the intended goal of having a UUID for the primary key rather 
than, say, an integer - or having no PK at all?


My immediate thought when reading this was why even store that data in 
a table? - if it's a simple log, use a log file. Especially if you 
don't know how you intend to search for data later on. There are many 
tools that are far superior to SQL when it comes to searching for text 
strings. You could even consider having a CSV table, which will give you 
an SQL interface to said text file.


/ Carsten



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/mysql



Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Neil Tompkins
Thanks for your response.  We expect to use the Audit log when looking into
exceptions and/or any need to debug table updates.  I don't think a CSV
table would be sufficient as we are wanting to use a interface to query
this data at least on a daily basis if not weekly.

I use UUID because we have currently 54 tables, of which probably 30 will
be audited.  So a INT PK wouldn't work because of the number of updates we
are applying.


On Fri, May 31, 2013 at 9:58 AM, Carsten Pedersen cars...@bitbybit.dkwrote:

 On 30-05-2013 09:27, Neil Tompkins wrote:

 Hi,

 I've created a Audit table which tracks any changed fields for multiple
 tables.  In my Audit table I'm using a UUID for the primary key.  However
 I
 need to have a reference back to the primary key(s) of the table audited.

 At the moment I've a VARCHAR field which stores primary keys like

 1
 1|2013-05-29
 2|2013-05-29
 2
 3
 1|2|2
 etc

 Is this the best approach, or should I have a individual field in the
 audit
 table for all primary keys.  At the moment I think the max number of
 primary keys on any given table is 3

 Thanks
 Neil


 First you need to ask yourself how you expect to use the table in the
 future. Will you be looking up the data on a regular basis? Or will lookups
 only be something you will do in exceptional situtions?

 What is the intended goal of having a UUID for the primary key rather
 than, say, an integer - or having no PK at all?

 My immediate thought when reading this was why even store that data in a
 table? - if it's a simple log, use a log file. Especially if you don't
 know how you intend to search for data later on. There are many tools that
 are far superior to SQL when it comes to searching for text strings. You
 could even consider having a CSV table, which will give you an SQL
 interface to said text file.

 / Carsten



 --
 MySQL General Mailing List
 For list archives: http://lists.mysql.com/mysql
 To unsubscribe:http://lists.mysql.com/mysql




Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Carsten Pedersen
Again: Unless you can give some idea as to the kind of lookups you will 
be performing (which fields? Temporal values? etc.), it is impossible to 
give advice on the table structure. I wouldn't blame anyone for not 
being able to do so; saving data for debugging will always be a moving 
target and almost by definition you don't know today what you'll be 
looking for tomorrow.


That's why I think that using CSV tables _the contents of which can 
subsequently be analyzed using any of a number of text file processing 
tools_ may indeed be your best initial option.


On UUIDs vs. INTs: (1) Please do yourself a favor and read up on how 
UUIDs are generated. If it's the same server that generates all the 
UUIDs, you won't get a lot of uniqueness for the amount of space you'll 
be using for your data and index; (2) Please do the math of just how 
many inserts you can do per second over the next 1.000 years if you use 
a longint auto-increment field for your PK.


/ Carsten

On 31-05-2013 11:14, Neil Tompkins wrote:

Thanks for your response.  We expect to use the Audit log when looking into
exceptions and/or any need to debug table updates.  I don't think a CSV
table would be sufficient as we are wanting to use a interface to query
this data at least on a daily basis if not weekly.

I use UUID because we have currently 54 tables, of which probably 30 will
be audited.  So a INT PK wouldn't work because of the number of updates we
are applying.


On Fri, May 31, 2013 at 9:58 AM, Carsten Pedersen cars...@bitbybit.dkwrote:


On 30-05-2013 09:27, Neil Tompkins wrote:


Hi,

I've created a Audit table which tracks any changed fields for multiple
tables.  In my Audit table I'm using a UUID for the primary key.  However
I
need to have a reference back to the primary key(s) of the table audited.

At the moment I've a VARCHAR field which stores primary keys like

1
1|2013-05-29
2|2013-05-29
2
3
1|2|2
etc

Is this the best approach, or should I have a individual field in the
audit
table for all primary keys.  At the moment I think the max number of
primary keys on any given table is 3

Thanks
Neil



First you need to ask yourself how you expect to use the table in the
future. Will you be looking up the data on a regular basis? Or will lookups
only be something you will do in exceptional situtions?

What is the intended goal of having a UUID for the primary key rather
than, say, an integer - or having no PK at all?

My immediate thought when reading this was why even store that data in a
table? - if it's a simple log, use a log file. Especially if you don't
know how you intend to search for data later on. There are many tools that
are far superior to SQL when it comes to searching for text strings. You
could even consider having a CSV table, which will give you an SQL
interface to said text file.

/ Carsten



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/mysql






--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/mysql



Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Neil Tompkins
The kind of look ups will be trying to diagnose when and by who applied a
update.  So the primary key of the audit is important.  My question is for
performance, should the primary key be stored as a indexed field like I
mentioned before, or should I have a actual individual field per primary key


On Fri, May 31, 2013 at 11:03 AM, Carsten Pedersen cars...@bitbybit.dkwrote:

 Again: Unless you can give some idea as to the kind of lookups you will be
 performing (which fields? Temporal values? etc.), it is impossible to give
 advice on the table structure. I wouldn't blame anyone for not being able
 to do so; saving data for debugging will always be a moving target and
 almost by definition you don't know today what you'll be looking for
 tomorrow.

 That's why I think that using CSV tables _the contents of which can
 subsequently be analyzed using any of a number of text file processing
 tools_ may indeed be your best initial option.

 On UUIDs vs. INTs: (1) Please do yourself a favor and read up on how UUIDs
 are generated. If it's the same server that generates all the UUIDs, you
 won't get a lot of uniqueness for the amount of space you'll be using for
 your data and index; (2) Please do the math of just how many inserts you
 can do per second over the next 1.000 years if you use a longint
 auto-increment field for your PK.

 / Carsten

 On 31-05-2013 11:14, Neil Tompkins wrote:

 Thanks for your response.  We expect to use the Audit log when looking
 into
 exceptions and/or any need to debug table updates.  I don't think a CSV
 table would be sufficient as we are wanting to use a interface to query
 this data at least on a daily basis if not weekly.

 I use UUID because we have currently 54 tables, of which probably 30 will
 be audited.  So a INT PK wouldn't work because of the number of updates we
 are applying.


 On Fri, May 31, 2013 at 9:58 AM, Carsten Pedersen cars...@bitbybit.dk
 wrote:

  On 30-05-2013 09:27, Neil Tompkins wrote:

  Hi,

 I've created a Audit table which tracks any changed fields for multiple
 tables.  In my Audit table I'm using a UUID for the primary key.
  However
 I
 need to have a reference back to the primary key(s) of the table
 audited.

 At the moment I've a VARCHAR field which stores primary keys like

 1
 1|2013-05-29
 2|2013-05-29
 2
 3
 1|2|2
 etc

 Is this the best approach, or should I have a individual field in the
 audit
 table for all primary keys.  At the moment I think the max number of
 primary keys on any given table is 3

 Thanks
 Neil


  First you need to ask yourself how you expect to use the table in the
 future. Will you be looking up the data on a regular basis? Or will
 lookups
 only be something you will do in exceptional situtions?

 What is the intended goal of having a UUID for the primary key rather
 than, say, an integer - or having no PK at all?

 My immediate thought when reading this was why even store that data in a
 table? - if it's a simple log, use a log file. Especially if you don't
 know how you intend to search for data later on. There are many tools
 that
 are far superior to SQL when it comes to searching for text strings. You
 could even consider having a CSV table, which will give you an SQL
 interface to said text file.

 / Carsten



 --
 MySQL General Mailing List
 For list archives: http://lists.mysql.com/mysql
 To unsubscribe:http://lists.mysql.com/mysql




 --
 MySQL General Mailing List
 For list archives: http://lists.mysql.com/mysql
 To unsubscribe:http://lists.mysql.com/mysql




Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Carsten Pedersen
Based on the little information available, I would make a lookup field 
consisting of tablename and primary keys.


(although I still believe that storing this information in the database 
in the first place is probably the wrong approach, but to each his own)


/ Carsten

On 31-05-2013 12:58, Neil Tompkins wrote:

The kind of look ups will be trying to diagnose when and by who applied
a update.  So the primary key of the audit is important.  My question is
for performance, should the primary key be stored as a indexed field
like I mentioned before, or should I have a actual individual field per
primary key


On Fri, May 31, 2013 at 11:03 AM, Carsten Pedersen cars...@bitbybit.dk
mailto:cars...@bitbybit.dk wrote:

Again: Unless you can give some idea as to the kind of lookups you
will be performing (which fields? Temporal values? etc.), it is
impossible to give advice on the table structure. I wouldn't blame
anyone for not being able to do so; saving data for debugging will
always be a moving target and almost by definition you don't know
today what you'll be looking for tomorrow.

That's why I think that using CSV tables _the contents of which can
subsequently be analyzed using any of a number of text file
processing tools_ may indeed be your best initial option.

On UUIDs vs. INTs: (1) Please do yourself a favor and read up on how
UUIDs are generated. If it's the same server that generates all the
UUIDs, you won't get a lot of uniqueness for the amount of space
you'll be using for your data and index; (2) Please do the math of
just how many inserts you can do per second over the next 1.000
years if you use a longint auto-increment field for your PK.

/ Carsten

On 31-05-2013 11 tel:31-05-2013%2011:14, Neil Tompkins wrote:

Thanks for your response.  We expect to use the Audit log when
looking into
exceptions and/or any need to debug table updates.  I don't
think a CSV
table would be sufficient as we are wanting to use a interface
to query
this data at least on a daily basis if not weekly.

I use UUID because we have currently 54 tables, of which
probably 30 will
be audited.  So a INT PK wouldn't work because of the number of
updates we
are applying.


On Fri, May 31, 2013 at 9:58 AM, Carsten Pedersen
cars...@bitbybit.dk mailto:cars...@bitbybit.dkwrote:

On 30-05-2013 09:27, Neil Tompkins wrote:

Hi,

I've created a Audit table which tracks any changed
fields for multiple
tables.  In my Audit table I'm using a UUID for the
primary key.  However
I
need to have a reference back to the primary key(s) of
the table audited.

At the moment I've a VARCHAR field which stores primary
keys like

1
1|2013-05-29
2|2013-05-29
2
3
1|2|2
etc

Is this the best approach, or should I have a individual
field in the
audit
table for all primary keys.  At the moment I think the
max number of
primary keys on any given table is 3

Thanks
Neil


First you need to ask yourself how you expect to use the
table in the
future. Will you be looking up the data on a regular basis?
Or will lookups
only be something you will do in exceptional situtions?

What is the intended goal of having a UUID for the primary
key rather
than, say, an integer - or having no PK at all?

My immediate thought when reading this was why even store
that data in a
table? - if it's a simple log, use a log file. Especially
if you don't
know how you intend to search for data later on. There are
many tools that
are far superior to SQL when it comes to searching for text
strings. You
could even consider having a CSV table, which will give you
an SQL
interface to said text file.

/ Carsten



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/mysql



Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Andrew Moore
There's been a thirst for this kind of thing for sometime but possibly
you're looking for a cheaper option? Since 5.5 there's some incarnation of
an audit plugin which can be extended for your own needs which should allow
you to perform some persistence of the results with either a log file which
could be processed into a table before you run your daily query?

http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html
http://karlssonondatabases.blogspot.co.uk/2010/03/mysql-audit-plugin-api.html

HTH

Andy


On Fri, May 31, 2013 at 12:05 PM, Carsten Pedersen cars...@bitbybit.dkwrote:

 Based on the little information available, I would make a lookup field
 consisting of tablename and primary keys.

 (although I still believe that storing this information in the database in
 the first place is probably the wrong approach, but to each his own)

 / Carsten


 On 31-05-2013 12:58, Neil Tompkins wrote:

 The kind of look ups will be trying to diagnose when and by who applied
 a update.  So the primary key of the audit is important.  My question is
 for performance, should the primary key be stored as a indexed field
 like I mentioned before, or should I have a actual individual field per
 primary key


 On Fri, May 31, 2013 at 11:03 AM, Carsten Pedersen cars...@bitbybit.dk
 mailto:cars...@bitbybit.dk wrote:

 Again: Unless you can give some idea as to the kind of lookups you
 will be performing (which fields? Temporal values? etc.), it is
 impossible to give advice on the table structure. I wouldn't blame
 anyone for not being able to do so; saving data for debugging will
 always be a moving target and almost by definition you don't know
 today what you'll be looking for tomorrow.

 That's why I think that using CSV tables _the contents of which can
 subsequently be analyzed using any of a number of text file
 processing tools_ may indeed be your best initial option.

 On UUIDs vs. INTs: (1) Please do yourself a favor and read up on how
 UUIDs are generated. If it's the same server that generates all the
 UUIDs, you won't get a lot of uniqueness for the amount of space
 you'll be using for your data and index; (2) Please do the math of
 just how many inserts you can do per second over the next 1.000
 years if you use a longint auto-increment field for your PK.

 / Carsten

 On 31-05-2013 11 tel:31-05-2013%2011:14, Neil Tompkins wrote:

 Thanks for your response.  We expect to use the Audit log when
 looking into
 exceptions and/or any need to debug table updates.  I don't
 think a CSV
 table would be sufficient as we are wanting to use a interface
 to query
 this data at least on a daily basis if not weekly.

 I use UUID because we have currently 54 tables, of which
 probably 30 will
 be audited.  So a INT PK wouldn't work because of the number of
 updates we
 are applying.


 On Fri, May 31, 2013 at 9:58 AM, Carsten Pedersen
 cars...@bitbybit.dk mailto:cars...@bitbybit.dk**wrote:


 On 30-05-2013 09:27, Neil Tompkins wrote:

 Hi,

 I've created a Audit table which tracks any changed
 fields for multiple
 tables.  In my Audit table I'm using a UUID for the
 primary key.  However
 I
 need to have a reference back to the primary key(s) of
 the table audited.

 At the moment I've a VARCHAR field which stores primary
 keys like

 1
 1|2013-05-29
 2|2013-05-29
 2
 3
 1|2|2
 etc

 Is this the best approach, or should I have a individual
 field in the
 audit
 table for all primary keys.  At the moment I think the
 max number of
 primary keys on any given table is 3

 Thanks
 Neil


 First you need to ask yourself how you expect to use the
 table in the
 future. Will you be looking up the data on a regular basis?
 Or will lookups
 only be something you will do in exceptional situtions?

 What is the intended goal of having a UUID for the primary
 key rather
 than, say, an integer - or having no PK at all?

 My immediate thought when reading this was why even store
 that data in a
 table? - if it's a simple log, use a log file. Especially
 if you don't
 know how you intend to search for data later on. There are
 many tools that
 are far superior to SQL when it comes to searching for text
 strings. You
 could even consider having a 

RE: Audit Table storage for Primary Key(s)

2013-05-31 Thread Rick James
UUID PRIMARY KEY (or even secondary index) -- 
Once the table gets big enough (bigger than RAM cache), each row INSERTed (or 
SELECTed) will be a disk hit.  (Rule of Thumb:  only 100 hits/sec.)  This is 
because _random_ keys (like UUID) make caching useless.  Actually, the slowdown 
will be gradual.  For example, once the table is 5 times as big as the cache, 
80% (1-1/5) of the INSERTs/SELECTs will hit disk.
Bottom line -- Avoid UUIDs in huge tables, if at all possible.  (Exception:  
The bits in type-1 UUIDs can be rearranged to be roughly chronological.)

BIGINT -- You cannot possibly hit its max with any existing hardware.

MyISAM -- PRIMARY KEY is just another secondary index.  Secondary indexes are 
separate BTrees.

InnoDB -- PRIMARY KEY and data coexist in the same BTree.  Secondary indexes 
are separate BTrees.

So, assuming this audit table will be huge (too big to be cached), you need 
to carefully consider every index, both for writing and for reading.

You mentioned that you might audit 50 tables?  An index that starts with 
table_name would be inserting/selecting in 50 spots.  If the second part of the 
index is something 'chronological', such as an AUTO_INCREMENT or TIMESTAMP, 
then there would be 50 hot spots in the index.  This is quite efficient.  
INDEX(table_name, UUID) would be bad because of the randomness.

InnoDB may be the preferred engine, even though the footprint is bigger.  This 
is because careful design of the PK could lead to INSERTs into hot spot(s), 
plus SELECTs being able to take advantage of locality of reference.  With 
PRIMARY KEY(table_name, ...), and SELECT .. WHERE tablename='...', InnoDB will 
find all the rows together (fewer disk hits); MyISAM will find the data 
scattered (more disk hits, hence slower).

Another aspect...  Would your SELECTs say WHERE ... AND timestamp BETWEEN... 
?  And, would you _usually_ query _recent_ times?  If so, there could be a 
boost from doing both of these
** PARTITION BY RANGE(TO_DAYS(timestamp))
** Move timestamp to the _end_ of any indexes that it is in.

I would be happy to discuss these principles further.  To be able to discuss 
more specifically, please provide
** Your tentative SHOW CREATE TABLE
** how big you plan for the table to become (#rows or GB),
** how much RAM you have

 -Original Message-
 From: Carsten Pedersen [mailto:cars...@bitbybit.dk]
 Sent: Friday, May 31, 2013 4:05 AM
 Cc: [MySQL]
 Subject: Re: Audit Table storage for Primary Key(s)
 
 Based on the little information available, I would make a lookup field
 consisting of tablename and primary keys.
 
 (although I still believe that storing this information in the database
 in the first place is probably the wrong approach, but to each his own)
 
 / Carsten
 
 On 31-05-2013 12:58, Neil Tompkins wrote:
  The kind of look ups will be trying to diagnose when and by who
  applied a update.  So the primary key of the audit is important.  My
  question is for performance, should the primary key be stored as a
  indexed field like I mentioned before, or should I have a actual
  individual field per primary key
 
 
  On Fri, May 31, 2013 at 11:03 AM, Carsten Pedersen
  cars...@bitbybit.dk mailto:cars...@bitbybit.dk wrote:
 
  Again: Unless you can give some idea as to the kind of lookups
 you
  will be performing (which fields? Temporal values? etc.), it is
  impossible to give advice on the table structure. I wouldn't
 blame
  anyone for not being able to do so; saving data for debugging
 will
  always be a moving target and almost by definition you don't know
  today what you'll be looking for tomorrow.
 
  That's why I think that using CSV tables _the contents of which
 can
  subsequently be analyzed using any of a number of text file
  processing tools_ may indeed be your best initial option.
 
  On UUIDs vs. INTs: (1) Please do yourself a favor and read up on
 how
  UUIDs are generated. If it's the same server that generates all
 the
  UUIDs, you won't get a lot of uniqueness for the amount of space
  you'll be using for your data and index; (2) Please do the math
 of
  just how many inserts you can do per second over the next 1.000
  years if you use a longint auto-increment field for your PK.
 
  / Carsten
 
  On 31-05-2013 11 tel:31-05-2013%2011:14, Neil Tompkins wrote:
 
  Thanks for your response.  We expect to use the Audit log
 when
  looking into
  exceptions and/or any need to debug table updates.  I don't
  think a CSV
  table would be sufficient as we are wanting to use a
 interface
  to query
  this data at least on a daily basis if not weekly.
 
  I use UUID because we have currently 54 tables, of which
  probably 30 will
  be audited.  So a INT PK wouldn't work because of the number
 of
  updates we
  are applying.
 
 
  On Fri, May 31, 2013 at 9:58 AM, Carsten

RE: Audit Table storage for Primary Key(s)

2013-05-31 Thread Jason Trebilcock
I'll ask the dumb question.

Why not create individual history tables corresponding to your 'main'
tables? So, if you have an 'address' table, then the original record could
be written to an 'address_his' table via an update or delete trigger
(depending on whether you allow deletions or not) when a change is
made...and the updated address record would be in the 'address' table. The
address_his table would really only need two additional fields to track your
data - a user field and a journal date/time.

Not sure how you're planning on writing to the changes to your audit table,
but this would allow the database to do the work instead of having to write
application code to do it.

Note: This is based on how I see things for the current application where I
work. Doesn't mean that it's right or wrong...it just works for us.

-Original Message-
From: Neil Tompkins [mailto:neil.tompk...@googlemail.com] 
Sent: Friday, May 31, 2013 3:43 AM
To: [MySQL]
Subject: Fwd: Audit Table storage for Primary Key(s)

Any advice anyone ?

-- Forwarded message --
From: Neil Tompkins neil.tompk...@googlemail.com
Date: Thu, May 30, 2013 at 8:27 AM
Subject: Audit Table storage for Primary Key(s)
To: [MySQL] mysql@lists.mysql.com


Hi,

I've created a Audit table which tracks any changed fields for multiple
tables.  In my Audit table I'm using a UUID for the primary key.  However I
need to have a reference back to the primary key(s) of the table audited.

At the moment I've a VARCHAR field which stores primary keys like

1
1|2013-05-29
2|2013-05-29
2
3
1|2|2
etc

Is this the best approach, or should I have a individual field in the audit
table for all primary keys.  At the moment I think the max number of primary
keys on any given table is 3

Thanks
Neil


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/mysql



Re: Audit Table storage for Primary Key(s)

2013-05-31 Thread Andrew Moore
Ah-ha, excuse my earlier response, I was under the impression you were
trying to track schema changes etc.

A


On Fri, May 31, 2013 at 7:54 PM, Rick James rja...@yahoo-inc.com wrote:

 UUID PRIMARY KEY (or even secondary index) --
 Once the table gets big enough (bigger than RAM cache), each row INSERTed
 (or SELECTed) will be a disk hit.  (Rule of Thumb:  only 100 hits/sec.)
  This is because _random_ keys (like UUID) make caching useless.  Actually,
 the slowdown will be gradual.  For example, once the table is 5 times as
 big as the cache, 80% (1-1/5) of the INSERTs/SELECTs will hit disk.
 Bottom line -- Avoid UUIDs in huge tables, if at all possible.
  (Exception:  The bits in type-1 UUIDs can be rearranged to be roughly
 chronological.)

 BIGINT -- You cannot possibly hit its max with any existing hardware.

 MyISAM -- PRIMARY KEY is just another secondary index.  Secondary indexes
 are separate BTrees.

 InnoDB -- PRIMARY KEY and data coexist in the same BTree.  Secondary
 indexes are separate BTrees.

 So, assuming this audit table will be huge (too big to be cached), you
 need to carefully consider every index, both for writing and for reading.

 You mentioned that you might audit 50 tables?  An index that starts with
 table_name would be inserting/selecting in 50 spots.  If the second part of
 the index is something 'chronological', such as an AUTO_INCREMENT or
 TIMESTAMP, then there would be 50 hot spots in the index.  This is quite
 efficient.  INDEX(table_name, UUID) would be bad because of the randomness.

 InnoDB may be the preferred engine, even though the footprint is bigger.
  This is because careful design of the PK could lead to INSERTs into hot
 spot(s), plus SELECTs being able to take advantage of locality of
 reference.  With PRIMARY KEY(table_name, ...), and SELECT .. WHERE
 tablename='...', InnoDB will find all the rows together (fewer disk hits);
 MyISAM will find the data scattered (more disk hits, hence slower).

 Another aspect...  Would your SELECTs say WHERE ... AND timestamp
 BETWEEN... ?  And, would you _usually_ query _recent_ times?  If so, there
 could be a boost from doing both of these
 ** PARTITION BY RANGE(TO_DAYS(timestamp))
 ** Move timestamp to the _end_ of any indexes that it is in.

 I would be happy to discuss these principles further.  To be able to
 discuss more specifically, please provide
 ** Your tentative SHOW CREATE TABLE
 ** how big you plan for the table to become (#rows or GB),
 ** how much RAM you have

  -Original Message-
  From: Carsten Pedersen [mailto:cars...@bitbybit.dk]
  Sent: Friday, May 31, 2013 4:05 AM
  Cc: [MySQL]
  Subject: Re: Audit Table storage for Primary Key(s)
 
  Based on the little information available, I would make a lookup field
  consisting of tablename and primary keys.
 
  (although I still believe that storing this information in the database
  in the first place is probably the wrong approach, but to each his own)
 
  / Carsten
 
  On 31-05-2013 12:58, Neil Tompkins wrote:
   The kind of look ups will be trying to diagnose when and by who
   applied a update.  So the primary key of the audit is important.  My
   question is for performance, should the primary key be stored as a
   indexed field like I mentioned before, or should I have a actual
   individual field per primary key
  
  
   On Fri, May 31, 2013 at 11:03 AM, Carsten Pedersen
   cars...@bitbybit.dk mailto:cars...@bitbybit.dk wrote:
  
   Again: Unless you can give some idea as to the kind of lookups
  you
   will be performing (which fields? Temporal values? etc.), it is
   impossible to give advice on the table structure. I wouldn't
  blame
   anyone for not being able to do so; saving data for debugging
  will
   always be a moving target and almost by definition you don't know
   today what you'll be looking for tomorrow.
  
   That's why I think that using CSV tables _the contents of which
  can
   subsequently be analyzed using any of a number of text file
   processing tools_ may indeed be your best initial option.
  
   On UUIDs vs. INTs: (1) Please do yourself a favor and read up on
  how
   UUIDs are generated. If it's the same server that generates all
  the
   UUIDs, you won't get a lot of uniqueness for the amount of space
   you'll be using for your data and index; (2) Please do the math
  of
   just how many inserts you can do per second over the next 1.000
   years if you use a longint auto-increment field for your PK.
  
   / Carsten
  
   On 31-05-2013 11 tel:31-05-2013%2011:14, Neil Tompkins wrote:
  
   Thanks for your response.  We expect to use the Audit log
  when
   looking into
   exceptions and/or any need to debug table updates.  I don't
   think a CSV
   table would be sufficient as we are wanting to use a
  interface
   to query
   this data at least on a daily basis if not weekly.
  
   I