У меня следующий запрос к базе данных mysql:
select value from fact_data
join entities on fact_data.entity_id=entities.id
where entities.ticker='{value}'
limit 1
fact_data - это большая таблица с> 23 миллионами записей. Если {значение} существует в entity.ticker, запрос возвращается менее чем за секунду. Но если {значение} не существует, запрос занимает более 2 минут, чтобы вернуться. Это как если бы сканирование таблицы выполнялось на fact_table. Почему бы mysql сначала не выполнить проверку, чтобы увидеть, существует ли entity.ticker с {value}, а затем, если его нет, нет необходимости выполнять дополнительную обработку.
Кстати, вот вывод EXPLAIN по вышеуказанному запросу:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,fact_data,ALL,NULL,NULL,NULL,NULL,23414811,
1,SIMPLE,entities,eq_ref,PRIMARY,PRIMARY,4,findata.fact_data.entity_id,1,"Using where"