В таблице items 12 млн записей, в using_items 11 млн. Разумеется количество гипотетическое и маловероятное.
Да нагенерируйте и посмотрите explain analyze. Были бы действительно объёмы, а не всего-то десяток миллионов строк.
not in дорог из-за требования стандарта по части обработки NULL в not in и отсутствии специальных оптимизаций для этого случая.
Может быть оптимизация появится.
not exists оптимален.
через left join план может быть идентичным not exists