В основном все, что я делаю, - это просто запускаю запрос и выясняю, как он выполняется на реальных данных. Если есть проблема, тогда я смотрю на планы выполнения.
Что касается планов выполнения, у Брэда МакГи есть интересная статья на эту тему.
В нем он говорит:
Если вы видите что-либо из следующего в плане выполнения, вы должны рассмотреть их как предупреждающие знаки и исследовать их на предмет потенциальных проблем с производительностью. Каждый из них не идеален с точки зрения производительности.
* Index or table scans: May indicate a need for better or additional indexes.
* Bookmark Lookups: Consider changing the current clustered index, consider using a covering index, limit the number of columns in the SELECT statement.
* Filter: Remove any functions in the WHERE clause, don’t include wiews[sic] in your Transact-SQL code, may need additional indexes.
* Sort: Does the data really need to be sorted? Can an index be used to avoid sorting? Can sorting be done at the client more efficiently?
Не всегда возможно избежать этого, но чем больше вы можете избежать их, тем быстрее будет выполняться запрос.