Comments 6
Уже несколько лет не писал на ms sql может подзабыл, но:
1) мне казалось что оптимизатор сам может менять порядок джоинов если это улучшает производительность и не влияет на выходной набор данных.
2) если нужно задать порядок джоинов то нужно указывать скобочки "(" и ")", например в случае если разный порядок джоинов влияет на а) выходной набор данных или б) оптимизатор тупит и вы сами указываете как будет быстрее.
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
0
поэтому и впихнули FORCE ORDER, чтобы не менял порядок соединения
0
1) мне казалось что оптимизатор сам может менять порядок джоинов если это улучшает производительность и не влияет на выходной набор данных.Да, по крайней мере в ms sql можно
То же самое касается даже вариаций «in/not in (select...» вместо join
Вот в sp если запрос опирается не на явно входные параметры, а на некие вычисленные на их основе внутренние переменные, которые потом фигурируют в join или условиях — там приходится ломать оптимизатору стереотип «всегда так делал» и явно писать option (recompile)
0
UFO just landed and posted this here
Спасибо за хорошую статью! Но всё же хотелось бы последовательности от простого к сложному. То есть вы пропустили пункт "как обновлять статистику", но не дошли до темы "как определить, что статистика требует обновления".
0
Sign up to leave a comment.
Почему для SQL Server важна статистика