Hi. On Mon 2002-11-18 at 17:05:23 -0800, [EMAIL PROTECTED] wrote: > Hello , > I need help with heap tables and calculating memory usage. I checked > in the Manual and found a formula, but I need help > deciphering it ;) > > " The memory needed for one row in a HEAP table is: > > sizeof(char*) is 4 on 32-bit machines and 8 on 64-bit machines. "
You have to know which kind of machine you have. E.g. a x86 is a 32-bit machine. So let's presume sizeof(char*) to be 4 from now on. If you have a 64-bit machine, you have to adjust accordingly. > SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) For all keys on the table, calculate the maximum length of that key and then add 4 * 2 Sum all that up. > + ALIGN(length_of_row+1, sizeof(char*)) Calculate the length of one row, then add 1. Then round that up to the next multiple of 4 (sizeof(char*)). Which size the columns types have and how to calculate the length of a row is described in the manual. > can anyone explain me what this means? Example: CREATE TABLE (id INT PRIMARY KEY, name CHAR(20), UNIQUE(name)); For all keys on the table: PRIMARY KEY: int 4 bytes => 4 + 4*2 = 12 UNIQUE(name): char(20) 20 bytes => 20 + 4*2 = 28 Sum all that up: 12 + 28 = 40 SUM_OVER_ALL_KEYS(4 + 4*2, 20 + 4*2) = 40 Length of row: Don't know it from head and don't have time to look it up. It is at least 4 (int) + 20 (char(20)) = 24. There is some overhead, e.g. for NULL bit, say, 2 bytes. => 26 bytes. The formula says: add 1 (=> 27 bytes) and take the next multiple of 4 (sizeof(char*)), which is 28. ALIGN(26+1, 4) = 28 So in the example, the memory usage per row would 40 + 28 = 68 bytes, presumed I did not make any mistakes. Bye, Benjamin. -- [EMAIL PROTECTED] --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php