Ваши таблицы смехотворно маленькие - всего 23 строки - это крошечный .
MySQL выбирает разные планы запросов в зависимости от того, сколько строк в таблице и сколько оценок будет выбрано (из статистики). Вы должны тестировать производительность ваших запросов с реалистичными данными - и объем данных, и распределение значений в данных должны быть максимально реалистичными. В противном случае план запроса, выбранный MySQL при тестировании, может отличаться от фактического плана запроса для вашей действующей системы.
Ваши таблицы настолько малы, что использование индекса может быть на медленнее , чем просто проверка таблицы напрямую. Помните, что проверка данных, которые уже находятся в памяти, выполняется быстро, но чтение выполняется медленно. Для доступа к индексу может потребоваться дополнительное чтение - сначала индекс должен быть выбран и прочитан, чтобы найти, какие строки выбрать, затем, если ваш индекс не является индексом покрытия, соответствующие строки в таблице должны быть выбраны и прочитаны, чтобы получить значения, которых нет в индексе. MySQL имеет полное право не использовать индекс, даже если он доступен, если считает, что это приведет к более медленному плану.
Поместите еще несколько строк в вашу таблицу (тысячи) и попробуйте снова запустить EXPLAIN. Вероятно, вы обнаружите, что при наличии большего количества строк индекс PRIMARY KEY будет использоваться для объединения.