On every request WordPress fetches all options with autoload set to yes in one query, unserialises the lot and holds it as a single alloptions entry. That is a sensible trade at 200 KB. Plugins add rows and hardly ever remove them when they are deactivated, so on a three-year-old install the same query returns megabytes — on every page load, including the 404s.
SELECT option_name, ROUND(LENGTH(option_value) / 1024) AS kb
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 20;
SELECT COUNT(*) AS total, ROUND(SUM(LENGTH(option_value)) / 1024) AS kb
FROM wp_options WHERE autoload = 'yes';
The rows at the top of that list are almost always transients that never expired and settings belonging to plugins that are no longer installed. Anything read only on an admin screen can have autoload flipped to no, after which it costs one query when it is genuinely needed instead of bytes on every request. add_option() takes the flag as its fourth argument and defaults it to yes, which is how the table got into this state in the first place.