Principalmente, tudo o que faço é apenas executar a consulta e descobrir como ela é executada nos dados do mundo real. Se houver algum problema, analiso os planos de execução.
Quanto aos planos de execução, Brad McGehee tem um artigo interessante sobre o assunto.
Nele ele diz:
Se você vir algum dos itens a seguir em um plano de execução, considere os sinais de alerta e investigue-os quanto a possíveis problemas de desempenho. Cada um deles não é o ideal da perspectiva de desempenho.
* 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?
Nem sempre é possível evitá-las, mas quanto mais você puder evitá-las, maior será o desempenho da consulta.