Evento Microsoft SQL Server 2022

El pasado jueves 29 de septiembre de 2022 participe como orador junto a mis amigos de SQL Argentina en un evento que se ha realizado en las oficinas de Microsoft Argentina y por medio de Teams en el cual hemos presentado algunas de las novedades que vienen con SQL Server 2022.

Comparto algunas fotos del evento y también links de interés sobre SQL Server 2022

What’s new in SQL Server 2022 (Preview) – SQL Server | Microsoft Learn

SQL Server 2022 Workshop Gratis

Cómo devolver registros aleatoriamente en SQL Server

Cómo devolver registros aleatoriamente en SQL Server

En este post te voy a mostrar dos opciones que tenemos en SQL para hacer una búsqueda aleatoria de registros en una tabla y compararlas.

Opción ORDER BY con NEWID()

Esta es una opción de las mas encontradas en internet como ejemplo de búsqueda y consta simplemente en hacer tu consulta y luego agregar un Order BY NEWID() como es el siguiente ejemplo:

USE ADVENTUREWORKS2019 
GO

SELECT TOP (100) * 
FROM
SALES.SALESORDERDETAIL 
ORDER BY NEWID()

Opción con TABLESAMPLE

Esta otra opción utiliza la función TABLESAMPLE la cual es nativa y pensada para hacer esto, la misma funciona con paginas de registros y también se le puede poner cantidades pero no suelen ser exactas y lo que debemos hacer si por ejemplo queremos traer un random de 100 registros es poner números mas altos como el caso del ejemplo siguiente

SELECT TOP (100) * 
FROM
SALES.SALESORDERDETAIL TABLESAMPLE (1000 ROWS)

Performance

Ambos casos que he mostrado darán los mismos resultados funcionales, ¿ pero que pasara con la performance? bueno para eso mostrare ambos planes de ejecución y algunos detalles

Usando NEWID()
Usando TableSample

Al observar ambos planes vemos una diferencia sustancial, ahora para la misma operación voy a ver el costo de cada uno de ellos

MétodoCosto Plan ejecución
NEWID()3.34
TABLESAMPLE0.0041

Sin ninguna duda que la diferencia que se observo en los planes de ejecución se ve muy marcada en los costos en donde usar el TABLESAMPLE es mucho mas eficiente que el otro método

Cómo devolver registros aleatoriamente en SQL Server

Mejorando los tiempos de Rollback usando ADR de SQL 2019

Mejorando los tiempos de Rollback usando ADR de SQL 2019

¿No te ha pasado que cuando haces una transacción y luego al hacer el rollback este ultimo tarda casi el mismo tiempo que tu transacción?

Bueno en SQL 2019 tenemos una nueva funcionalidad llamada accelerated database recovery la cual te va a permitir mejorar estos tiempos.

En el siguiente vídeo de mi canal de Youtube te muestro cómo funciona ADR

Acá te copio el código de ejemplo que he utilizado

CREATE DATABASE DEMOADR;
GO

USE DEMOADR
GO

SET STATISTICS TIME ON

DROP TABLE IF EXISTS t1;

SELECT TOP 5000000 t1.* 
INTO t1 
FROM sys.all_objects AS t1
CROSS JOIN sys.all_objects AS t2
CROSS JOIN sys.all_objects AS t3

ROLLBACK TRAN

-- activar adr

ALTER DATABASE DEMOADR
SET ACCELERATED_DATABASE_RECOVERY = ON;
GO

-- probamos de nuevo

BEGIN TRANSACTION
DROP TABLE IF EXISTS t1;

SELECT TOP 5000000 t1.* 
INTO t1 
FROM sys.all_objects AS t1
CROSS JOIN sys.all_objects AS t2
CROSS JOIN sys.all_objects AS t3

ROLLBACK TRAN