Integer types (TINYINT, INT, BIGINT) in MySQL - Time & Space Complexity
When working with integer types in MySQL, it's helpful to understand how their size affects performance.
We want to see how the choice of integer type impacts the speed of database operations.
Analyze the time complexity of inserting and querying integer values of different sizes.
CREATE TABLE numbers (
id INT PRIMARY KEY AUTO_INCREMENT,
small_num TINYINT,
normal_num INT,
big_num BIGINT
);
INSERT INTO numbers (small_num, normal_num, big_num) VALUES (127, 2147483647, 9223372036854775807);
SELECT * FROM numbers WHERE normal_num = 1000;
This code creates a table with three integer types, inserts a row, and queries by a normal integer.
Look at what repeats when the database handles these integers.
- Primary operation: Reading and writing integer values in storage.
- How many times: Once per row inserted or queried, repeated for many rows in large tables.
As the number of rows grows, the work to read or write integers grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 reads/writes |
| 100 | 100 reads/writes |
| 1000 | 1000 reads/writes |
Pattern observation: The number of operations grows directly with the number of rows.
Time Complexity: O(n)
This means the time to read or write integers grows in a straight line as the number of rows increases.
[X] Wrong: "Using bigger integer types like BIGINT makes queries much slower because they are huge numbers."
[OK] Correct: The size difference is small for the database, so the time to read or write is mostly about how many rows you have, not the integer size.
Understanding how data size affects query time helps you design efficient databases and answer questions clearly in interviews.
"What if we added an index on the BIGINT column? How would the time complexity of queries change?"
Practice
Solution
Step 1: Understand the range of
TINYINTand compare with other typesTINYINTcan store values from 0 to 255 when unsigned, which fits small numbers efficiently.INTandBIGINTstore much larger numbers but use more space.SMALLINTalso uses more space unnecessarily.Final Answer:
TINYINT -> Option CQuick Check:
Small numbers (0-255) = TINYINT [OK]
- Choosing INT for small numbers wastes space
- Confusing TINYINT with SMALLINT
- Not considering unsigned range
user_id in MySQL?Solution
Step 1: Check correct order of declaration
In MySQL, the column name comes first, then the data type, optionally followed by constraints likeNOT NULL. Only A follows this:user_id BIGINT NOT NULL;.Final Answer:
user_id BIGINT NOT NULL; -> Option DQuick Check:
Column name + type + constraints = correct syntax [OK]
- Putting type before column name
- Using invalid order of keywords
- Missing semicolon in some contexts
orders with a column order_count TINYINT UNSIGNED, what will be the result of this query?INSERT INTO orders (order_count) VALUES (300);
SELECT order_count FROM orders;
Solution
Step 1: Understand TINYINT UNSIGNED range and insert effect
TINYINT UNSIGNEDstores 0-255 only. 300 exceeds range, so INSERT throws 'Error: Out of range value' (default strict mode).Final Answer:
Error: Out of range value -> Option BQuick Check:
Value > 255 in TINYINT UNSIGNED causes error [OK]
- Assuming values wrap around silently
- Ignoring unsigned range limits
- Expecting automatic truncation without error
INT but you want to store numbers larger than 4,294,967,295. Which change fixes the problem?Solution
Step 1: Understand INT range limits and select proper type
SignedINTmax ~2.1 billion, UNSIGNED INT max 4,294,967,295.BIGINThandles much larger (up to ~9 quintillion).Final Answer:
Change the column type to BIGINT -> Option AQuick Check:
BIGINT stores bigger numbers than INT [OK]
- Using TINYINT which is smaller
- Adding UNSIGNED but still too small
- Switching to VARCHAR loses numeric benefits
Solution
Step 1: Balance storage and range needs
TINYINTtoo small; alwaysBIGINTwastes space. UseINTinitially (efficient for small/medium), ALTER toBIGINTlater if needed.Final Answer:
Use INT for most scores and BIGINT only if scores exceed INT range -> Option AQuick Check:
Balance size and range with INT then BIGINT [OK]
- Always using BIGINT wastes space
- Starting with TINYINT causes overflow
- Manual compression is complex and error-prone
Ready to prove it?
Pass the test and this pattern moves unknown
