Mejora el rendimiento optimizando las consultas de ASP.NET Identity y otros proveedores de membresías.

Si tu aplicación utiliza ASP.NET Identity u otros sistemas de membresías tales como SQL, Universal o membresía simple, probablemente has tenido el siguiente problema.

Si utilizas ASP.NET Identity 2.x, la consulta para obtener el perfil utiliza la función UPPER() en el nombre de usuario, esto causa que los índices de nombre de usuario sean ignorados.

La solución es agregar una columna calculada (computed column) con la llamada a UPPER(username) y un índice sobre ese campo. Esto es extremadamente efectivo en mejorar el rendimiento y no requiere más cambios a la aplicación o actualizar el ASP.NET Identity Framework.

Aquí hay un ejemplo de los comandos SQL que necesitarías ejecutar en la base de datos (la tabla y los nombres de las columnas podrían ser diferentes en tu aplicación).

SQL Query para ASP.NET Identity 2.1

ALTER TABLE dbo.AspNetUsers
 ADD NormalizedName AS UPPER(UserName);
CREATE NONCLUSTERED INDEX
 [IX_NormalizedName] ON [dbo].[AspNetUsers] ([NormalizedName] ASC);

Si utilizas ASP.NET Universal Providers, la consulta para obtener los valores del perfil utiliza la función LOWER() en nombre de usuario. Tienes que hacer lo siguiente.

SQL Query para ASP.NET Universal Provider.

ALTER TABLE dbo.Users
 ADD NormalizedName AS LOWER(Username);
CREATE NONCLUSTERED INDEX
 [IX_NormalizedName] ON [dbo].[Users] ([NormalizedName] ASC);

Nota:

Aunque lo hemos hecho para Username, el mismo principio debería aplicar para otras columnas donde hagas muchas consultas.

Puedes usar LOWER() o UPPER() basado en que queries están siendo ejecutados.

Puedes seguir los mismos pasos para SQL Membership y Simple Membership también.

Los clientes han visto significativas mejoras en rendimiento con esta solución, recomendamos que las hagas en tu aplicación.

.NET Web Development and Tools Blog – Pranav Rastogi.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s