понедельник, 7 июня 2010 г.

SQL

Сегодня был нанесен сверх удар по моему восприятию мира.
Дело все в SQL запросе, суть такая есть главный запрос и к нему LEFT JOIN'няться несколько табличек:
Одна основная tbl1 и две добавочных (add1,add2), но у второй добавочной есть поле, которое ссылается на таблицу по типу add1 - add11
(смысл это экземпляры и контейнеры)

Изначальный мой красивый запрос был таким:

left join
(
tbl1
left join add1 on (add1.type = tbl1.value)
left join (add2 inner join add11 on (add11.type=add2.parent)
on (add1.type = tbl1.value)
) on tbl1.value = data.p1


т.е. связка add11.type = add2.parent жесткая.
Но запрос тормозил ужастно (кол-во записей в каждой таблице больше миллиона), и потом я заменил его

left join
(
tbl1
left join add1 on (add1.type = tbl1.value)
left join add2 on (add1.type = tbl1.value)
left join add11 on (add11.type=add2.parent)
) on tbl1.value = data.p1


Стал выполняться в десятки раз быстрее - хоть и стал более некрасивым.