Я очень смущен и разочарован -
У меня огромная таблица (table1).
Я пытаюсь выполнить запрос на удаление, основанный на другой таблице.Оптимизатор запросов не использует соответствующий индекс, поэтому я пытаюсь заставить его
delete table1
FROM table1
FORCE INDEX FOR JOIN (index1)
inner JOIN table2
where
table1.field1=table2.field1
and
table1.field2=table2.field2
and
date(table1.startdatetime)=table2.reportdate;
Эквивалентный выбор выглядит следующим образом:
SELECT *
FROM table1
FORCE INDEX FOR JOIN (index1)
inner JOIN table2
where
table1.field1=table2.field1
and
table1.field2=table2.field2
and
date(table1.startdatetime)=table2.reportdate;
Что я не понимаю, так эточто запрос на удаление не использует индекс, а запрос на выборку
"объяснение" из выбора:
1 SIMPLE table2 index idx1 idx1 55 1456 Using where; Using index
1 SIMPLE table1 ref index1 index1 51 table2.field1,table2.field2 508 **Using index condition**
Но объяснение удаления заключается в следующем:
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, table2, index, idx1, idx1, 55, , 1456, Using where; Using index
1, SIMPLE, table1, ref, index1, index1, 51, table2.field1,table2.field2, 508, Using where
Почему оператор select имеет Использование условия индекса и эквивалентное удаление имеет с использованием где ?
Как заставить принудительно удалитьиспользовать индекс также?
Спасибо!