mysql table very large size although it doesn't have a lot of records
When it comes to a MyISAM table, deleting rows does trigger a kind of garbage collection in that all the unused space is recording in a linked list.

The data length you saw is correct. Your cron job deleted every row less than UNIX_TIMESTAMP(NOW()). This will not cause the table to shrink. All the delete rows are just chained together.

THere are other options you could have chosen to shrink the table:


Option 1 : ALTER TABLE cache_form ENGINE=MyISAM;
Option 2 : OPTIMIZE TABLE cache_form;
Option 3 : Manually copy to a temp table


Option 1 simply does the following


copies data pages in the .MYD to a temporary .MYD and renames it back to cache_form.MYD.
copies index pages in the .MYI to a temporary .MYI and renames it back to cache_form.MYI.


Naturally, Option 1 will not copy the unused space.

Option 2 performs the same operation as Option 1 and then performs ANALYZE TABLE cache_form; to compute index statistics.

Option 3 would simply be an emulation of Option 1. Here it is:

CREATE TABLE cache_form_new LIKE cache_form;
INSERT INTO cache_form_new SELECT * FROM cache_form;
ALTER TABLE cache_form RENAME cache_form_old;
ALTER TABLE cache_form_new RENAME cache_form;
DROP TABLE cache_form_old;


Whenever you did the compression this way, find out what data_length is for cache_form_new. This will give you an idea what the actual size should be.