Имеет ли значение размещение соединения?
Порядок, в котором они написаны, не имеет значения для ВНУТРЕННИХ СОЕДИНЕНИЙ.
Имеет ли значение порядок, в котором имеет значение пункт where, илиMySQL оптимизирует?
Нет.Письменный порядок в предложении WHERE не имеет значения для анализатора и оптимизатора запросов MySQL
Поможет ли и в моем случае индексирование?
Потенциально.Составной индекс type_status (Type, Status) для table1 может помочь, поскольку именно здесь ваше предложение WHERE может уменьшить начальное чтение строк.
Есть ли какое-либо преимущество JOINing в FROM по сравнению с добавлением 'table1.CurrentName = table2.id 'в предложении WHERE?
Для INNER JOINs не имеет значения, находится ли условие JOIN в предложении FROM или в предложении WHERE.
Я думал, что добавление индекса в table1.CurrentName может помочь, но теперь я думаю, что нет.Я изменил запрос, чтобы удалить ссылки на table2, и он все еще работал медленно.(см. 3b)
Индекс для table1.CurrentName не помог бы в запросе.
Похоже, что большая часть замедления может быть просто при чтении 800K записей, глядя наЗначения типа и статуса.
Это подтверждает мои мысли выше.Чтобы добавить составной индекс (возможно, это не очень хорошая вещь для онлайн), это было бы что-то вроде
ALTER TABLE table1 ADD INDEX type_status (Type, Status);
Я думал, что это имеет смысл, только когда есть больше уникальных значений.
Селективность определенно помогает, но высокая мощность не единственный подходящий контекст.