SQL SEVER WITH FORCESEEK

SQL SEVER WITH FORCESEEK

Un metodo para optimizar consultas de SQL SERVER en tablas relacionadas es utilizar esta clausula.

¿Que es lo que hace?, veamoslo en un ejemplo.
Tenemos nuestra tabla de clientes con nuestra clave primaria que es idcliente y por otro lado tenemos la tabla personas de contacto con ForeingKey de IDCliente.

Pues bien si ejecutaramos la consulta tal cual ;


Sql Prioriza la busqueda sobre la tabla de cliente y luego la relación con PerContacto sacando solo las coincidencias por idcliente. pues bien. Marcando ForceSeek , forzamos a SQL a que no empieze por la tabla cliente si no por la tabla PerContacto, el ejemplo quedaria de la siguiente forma:

Un dato a tener en cuenta es que al marcar ForceSeek la union entre tablas debe estar realizada por la PrimaryKey -> ForeingKey si no , no nos dejara ejecutarla.

Para que esto sea mas efectivo debemos utilizar un where sobre la tabla marcada con forceseek y con ello veremos que el tiempo de ejecución de SQL sobre esa consulta se vera reducido, el cambio no es muy significativo en tablas con pocos registros.

Si quieres saber como optimizar mas tus consultas consulta tambien este otro articulo WITH(NOLOCK)