15.9.4. Implementing the info()
Function
Prior to commencing a table scan, the
info()
function is called to provide extra table information to the
optimizer.
The information required by the optimizer is not given through
return values but instead by populating certain properties of
the storage engine class, which the optimizer reads after the
info()
call returns.
In addition to being used by the optimizer, many of the values
set during a call to the info()
function
are also used for the SHOW TABLE STATUS
statement.
The public properties are listed in full in
sql/handler.h
; several of the more common
ones are copied here:
ulonglong data_file_length; /* Length off data file */
ulonglong max_data_file_length; /* Length off data file */
ulonglong index_file_length;
ulonglong max_index_file_length;
ulonglong delete_length; /* Free bytes */
ulonglong auto_increment_value;
ha_rows records; /* Records in table */
ha_rows deleted; /* Deleted records */
ulong raid_chunksize;
ulong mean_rec_length; /* physical reclength */
time_t create_time; /* When table was created */
time_t check_time;
time_t update_time;
For the purposes of a table scan, the most important property is
records
, which indicates the number of
records in the table. The optimizer will perform differently
when the storage engine indicates that there are zero or one
rows in the table than it will when there are two or more. For
this reason it is important to return a value of two or greater
when you do not actually know how many rows are in the table
before you perform the table scan (such as in a situation where
the data may be externally populated).