Every request WordPress serves opens with one query that reads every option flagged autoload = yes and unserialises the lot into memory. That is a reasonable design for a few dozen settings. It is why a plugin that parks a cached remote feed in the options table charges you for that feed on every uncached page view, including the ones that never touch the plugin.
SELECT option_name, LENGTH( option_value ) AS bytes
FROM wp_options
WHERE autoload = 'yes'
ORDER BY bytes DESC
LIMIT 10;
-- option_name bytes
-- feed_importer_response_cache 892104
-- rewrite_rules 41288
-- cron 9210
The third argument to add_option() is the deprecated one and the fourth is the flag, so a non-autoloaded option is add_option( $name, $value, '', 'no' ) — easy to get wrong and easier to forget. update_option() cannot change the flag on a row that already exists, which means fixing an existing offender is a delete followed by an add; wp option delete and wp option add do that without opening a MySQL prompt. Running the query above is worth doing before profiling anything else on a site that feels slow — a megabyte of autoloaded data is a megabyte unserialised on every request, and finding it takes about a minute.