DISTINCT
означает, что для каждой записи, добавленной к результирующему набору, MySQL должен проверить весь набор на наличие, прежде чем добавлять запись. Это означает, что у него есть O (n ^ 2) для вставки. При использовании его в предложении IN
это может означать, что вы добавляете значительно больше работы для получения нулевой выгоды. Попробуйте вместо этого:
SELECT DISTINCT caseNumber
FROM master_break
WHERE invoiceNumber='$invoice'
AND bay='$bay'
AND caseNumber NOT IN(
SELECT caseNumber
FROM shipped_data
WHERE status='' AND bay='$bay')
ORDER BY caseNumber ASC
Очевидно, индексировать caseNumber для shipped_data и объединять для обоих.