SQL veri tabanında kullanılan istatistikler oldukça önemli bir yere sahiptir.
Tablolarda verilerin yüzde kaç oranında yer aldığını belirten istatistikler index ler ile birlikte otomatik oluşurlar.
SQL Server 2022 öncesinde elle oluşturulan istatistikler bazen sorunlara sebep oluyordu. Şema değişikleri de bunlardan biri.
Tablo ya da kolonların silinmesi durumunda şema değişeceğinden elle oluşturduğunuz istatistik silinmeyecektir ve dolayısıyla hatalara sebep olur ve silmek için ekstra işlem yapmak gerekir.
SQL Server 2022 de gelen Auto-Drop özelliği istatistiğin bağlı olduğu nesne silinirse istatistiğinde otomatik olarak silinmesini sağlar.
Tablomda auto-drop özelliği ile bir istatistik oluşturuyorum.
1 2 3 4 |
CREATE STATISTICS Personel ON Kullanici (Ad, Soyad, Sicilno) WITH AUTO_DROP = ON; |
Sorgu ile kontrol ettiğimde elle oluşturduğum istatistik için auto-drop özelliğinin açık olduğunu görmekteyim. Index den gelen istatistikte ise kapalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
USE ortacdb; GO SELECT s.name AS statistics_name ,c.name AS column_name ,sc.stats_column_id ,s.auto_created ,s.user_created ,s.auto_drop FROM sys.stats AS s INNER JOIN sys.stats_columns AS sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id INNER JOIN sys.columns AS c ON sc.object_id = c.object_id AND c.column_id = sc.column_id WHERE s.object_id = OBJECT_ID('dbo.Kullanici'); |
Oluşturduğum istatistiğe bağlı olan bir kolonu siliyorum.
İstatistik de silinmiş oldu.
Auto-drop özelliğini açmadan kolonu silseydim hata ile karışılacaktım.
Auto-Drop özelliği sonradan açılıp kapatılabilir.
UPDATE STATISTICS [dbo].[Kullanici] [Peronel] WITH AUTO_DROP = ON;
Ya da
UPDATE STATISTICS [dbo].[Kullanici] [Peronel] WITH AUTO_DROP = OFF;