The simple answer is no - there isn't any 5 byte integer field.
However, when reading deeper into the source of your question, there seems to be some misperception about the overhead associated with a BIGINT.
Yes, you're looking at double the data storage for that column, but every row in MySQL has:
- a 13 byte header for your clustered index (PK)
- a 6 byte header per indexed record
- a 1 byte pointer per non-indexed record
(See here: https://dev.mysql.com/doc/refman/5.1/en/innodb-table-and-index.html#innodb-physical-record)
Thus, you're only really increasing your row size by about 14% by cutting your BIGINT to 5 bytes ((8-5) / (8+13)), assuming it's the only column in your table.
If you use the COMPACT row format and eliminate your PK, you could save 8 bytes per row (reducing your index to 5 bytes).
Your index's performance impact will be negligible with BIGINT vs INT (though eliminating your PK will probably result in some noticeable performance loss, due to loss of clustering).
The storage impact will also be rather negligible - you're looking at ~ 20 GB impact at an ordinality around 8 billion. Modern storage solutions should eat that up.
INTandBIGINTshould not be that different. Is 50% more storage really that big of a problem for you?BIGINTbut if you have an index on the column then the lookup time should still be fast. See the answer given by @StevenMoseley