Query performance of a SELECT statement using WHERE and NOT IN
I don't see anything unreasonable about the query itself.

However, if I'm interpreting the output of EXPLAIN correctly, the anti-join with sheet_user_popup_not_adam is being done using a full table scan.  Run

SHOW INDEXES FROM sheet_user_popup_not_adam;


If no index exists on the user_id column, then run

CREATE INDEX sheet_user_popup_not_adam_user_id ON sheet_user_popup_not_adam (user_id);


Maybe that should be CREATE UNIQUE INDEX … instead, if appropriate.  Hopefully the performance should improve after you create the index.