Pull to refresh

Comments 6

Уже несколько лет не писал на ms sql может подзабыл, но:
1) мне казалось что оптимизатор сам может менять порядок джоинов если это улучшает производительность и не влияет на выходной набор данных.
2) если нужно задать порядок джоинов то нужно указывать скобочки "(" и ")", например в случае если разный порядок джоинов влияет на а) выходной набор данных или б) оптимизатор тупит и вы сами указываете как будет быстрее.
SELECT * FROM 
		A AS a 
		LEFT JOIN
			(B AS b INNER JOIN
			 C AS c ON b.id=c.id) 
		ON a.id=b.id
поэтому и впихнули FORCE ORDER, чтобы не менял порядок соединения
Да. Я написал свой коммент не что бы спорить, а с целью расширить тему и освежить свои знания, вдруг что подзабыл или путаю. Лень устанавливать ms sql, тестировать запросы и читать msdn/BOL, но вдруг кому будет любопытно и поделится результатами или знаниями.
1) мне казалось что оптимизатор сам может менять порядок джоинов если это улучшает производительность и не влияет на выходной набор данных.
Да, по крайней мере в ms sql можно иногдапрактически всегда писать джойны скорее в угоду эстетике/привычкам, ибо оптимизатор это не путает.
То же самое касается даже вариаций «in/not in (select...» вместо join

Вот в sp если запрос опирается не на явно входные параметры, а на некие вычисленные на их основе внутренние переменные, которые потом фигурируют в join или условиях — там приходится ломать оптимизатору стереотип «всегда так делал» и явно писать option (recompile)
UFO just landed and posted this here

Спасибо за хорошую статью! Но всё же хотелось бы последовательности от простого к сложному. То есть вы пропустили пункт "как обновлять статистику", но не дошли до темы "как определить, что статистика требует обновления".

Sign up to leave a comment.