Поскольку почти все говорят, что объединения дадут оптимальную производительность, я только что вошел в систему, чтобы сказать, что у меня был совершенно противоположный опыт.
Поэтому несколько дней назад я писал запрос для 3-4 таблиц, в которыхогромное количество данных.Я написал большой SQL-запрос с объединениями, и его выполнение заняло около 2-3 часов.Затем я реструктурировал его, создал вложенный запрос выбора, поместил столько вложенных ограничений, сколько смогу, во вложенный и сделал его как можно более строгим, а затем производительность улучшилась на> 90%, теперь для его выполнения требуется менее 4 минут.
Это всего лишь мой опыт и, возможно, теоретически соединения лучше.Я просто хотел поделиться своим опытом.Лучше всего попробовать разные вещи, получить дополнительные знания о таблицах, их индексах и т. Д.
Обновление:
И я только что узнал, что я на самом деле предложил на этой справочной странице по оптимизации MySQL.http://dev.mysql.com/doc/refman/5.6/en/optimizing-subqueries.html
Вставка здесь для быстрого ознакомления:
Заменить объединение подзапросом.Например, попробуйте следующее:
SELECT DISTINCT column1 FROM t1, ГДЕ t1.column1 IN (SELECT column1 FROM t2);
Вместо этого:
ВЫБРАТЬ ОТЛИЧИЕ t1.column1 ОТ t1, t2 ГДЕ t1.column1 = t2.column1;
Перемещение предложений снаружи внутрь подзапроса. Например, используйте этот запрос:
SELECT * ОТ t1, ГДЕ s1 IN (ВЫБРАТЬ s1 ИЗ t1 СОЮЗ ВСЕ ВЫБРАТЬ s1ОТ Т2);Вместо этого запроса:
SELECT * ОТ t1, ГДЕ s1 IN (ВЫБЕРИТЕ s1 ОТ t1) ИЛИ s1 IN (ВЫБЕРИТЕ s1 ОТ t2);Для другого примера используйте этот запрос:
SELECT (SELECT column1 + 5 FROM t1) FROM t2;Вместо этого запроса:
SELECT (SELECT column1 FROM t1) + 5 FROM t2;