Не знам разликата, която виждате в предишните и текущите си инсталации, но поведението на сървърите има смисъл.
SELECT test_events.create_time FROM test_events LEFT JOIN test_event_types ON ( test_events.event = test_event_types.id ) ORDER BY test_events.create_time DESC LIMIT 1;
В тази заявка нямате клауза where, но извличате само един ред. И това е след сортиране по create_time
което случайно има индекс. И този индекс може да се използва за сортиране. Но нека да видим второто запитване.
SELECT test_events.create_time FROM test_events LEFT JOIN test_event_types ON ( test_events.event = test_event_types.id ) WHERE base = 314 ORDER BY test_events.create_time DESC LIMIT 1
Нямате индекс в основната колона. Така че не може да се използва индекс за това. За да намери съответните записи, mysql трябва да направи сканиране на таблица. След идентифициране на съответните редове, те трябва да бъдат сортирани. Но в този случай програмата за планиране на заявки е решила, че просто не си струва да се използва индексът на create_time
Виждам няколко проблема с вашата настройка, като първият е липсата на индекс на base
както вече беше споменато. Но защо базата е varchar? Изглежда, че съхранявате цели числа в него.
ALTER TABLE test_events
ADD PRIMARY KEY (id),
ADD KEY client (client),
ADD KEY event_time (event_time),
ADD KEY manager (manager),
ADD KEY base_id (base_id),
ADD KEY create_time (create_time);
И създаването на множество индекси като този няма много смисъл в mysql. Това е така, защото mysql може да използва само един индекс на таблица за заявки. Ще бъдете много по-добре с един или два индекса. Вероятно многоколонни индекси.
Мисля, че вашият идеален индекс би съдържал полета create_time и събитие