It's the DEPENDENT SUBQUERY
reported by the EXPLAIN that is the most costly. That means that it executes the subquery once for each distinct sid in the outer query. How much overhead this costs is relative to the number of distinct sid values over your 180000+ rows.
You can try this query to ensure the subquery is executed only once. It may need to store the results in a temp table, but that temp table will only have ~7 rows, according to your EXPLAIN.
SELECT d1.sid, d1.cid, d1.data
FROM webform_submitted_data AS d1
INNER JOIN (
SELECT DISTINCT sid FROM webform_submitted_data
WHERE cid=16 AND data IN (' ',0)) AS d2 USING (sid)
ORDER BY d1.sid ASC