Я пытаюсь выбрать ряд элементов из table1, которые не указаны в table2. Таблица 1 имеет приблизительно 3 миллиона строк, а Таблица 2 имеет приблизительно 8 000. У меня уже есть индекс на table1 for (expire, ненадежный, блок, удаленный, флаг, expirationDate). Как оптимизировать это:Как оптимизировать левую ссылку на большой стол
SELECT table1.*
FROM table1
LEFT JOIN table2
ON table1.item_ID = table2.item_ID
WHERE table1.expire = '0'
AND table1.unreliable = '0'
AND table1.block = '0'
AND table1.deleted = '0'
AND table1.flag = '0'
AND table1.expirationDate >= CURDATE()
AND table2.item_ID IS NULL
GROUP BY item_ID
LIMIT 5000
Но не должны ли эти индексы существовать, поскольку item_ID является первичным ключом в обеих таблицах? – user2694306
Вы не сказали 'item_ID', вы первичный ключ. Я не уверен, что mysql автоматически создает индекс для первичных ключей. Я считаю, что это не так. Вы можете просто проверить это с помощью 'SHOW INDEX'. Если он не показывает такой индекс, его не существует. –
Ах, ты был прав, это был не первичный ключ во второй таблице. Теперь это работает хорошо. Благодаря! – user2694306