Principalmente, todo lo que hago es ejecutar la consulta y descubrir cómo se ejecuta contra datos del mundo real. Si hay un problema, entonces miro los planes de ejecución.
En cuanto a los planes de ejecución, Brad McGehee tiene un artículo interesante sobre el tema.
En él dice:
Si ve algo de lo siguiente en un plan de ejecución, debe considerarlos como signos de advertencia e investigarlos para detectar posibles problemas de rendimiento. Cada uno de ellos es menos que ideal desde una perspectiva de rendimiento.
* 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?
No siempre es posible evitarlos, pero cuanto más los pueda evitar, más rápido será el rendimiento de la consulta.