[Homework] Databases - Performance
Здравейте колеги,
Оказа се (поне за мен), че базите данни не са толковоа скучни колкото си мислех. Също така на пръв поглед скучното домашно за перформанс се оказа доста интересно ако се "заиграеш".
Наблъскването на 10000000 записа е напръв поглед проста задача и може да го решиш със следния код:
CREATE DATABASE [Test] GO
USE Test
CREATE TABLE DateAndTex
(
CurrentTime DATETIME NULL,
TextInput NVARCHAR(MAX) NULL
)
GO
INSERT INTO DateAndTex
VALUES(GETDATE(), 'ала бала');
GO 10000000
Но това отнема на моята щайга много време не изтърпях да го изчакам и да видя колко точно, ако се замислим как да подобрим перформанса ще се сетим за това, че дефоутната база е голяма 3 мб и се разшерява с 1мб. И с помоща на Google ще добавим реда: ALTER DATABASE Test MODIFY FILE
( NAME = N'Test' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB ) GO
До тук добре съборихме малко време :). Като помислих още малко... абе WHILE цикъла няма ли да работи по - бързо от колкото GO (н пъти). Дай да пробваме... Оказа се, че GO 10000 пъти на моята машина пълни таблицата за 7 секунди..., а като си направя while 10000 заедно с декларирането на брояча и при изчистен кеш ми ги тъпче за 4 секунди. Така че най - вероятно работи по - бързо с WHILE отколкото с GO.
Някой сеща ли се за други оптимизации?
След индексирането по дата и при мен е така :)
Да ти кажа при мен и преди, и след индексиране все тая. Даже на втора задача където се тества точно разликата с и без индекс... при мен не успях да намеря такава. Форсвам некеширано търсене, гледам execution plan-овете, виждам, че са различни, в единия случай ползва index Scan, на другото Index Seek и пак.... Пусках го бая пъти и почти винаги беше 1:1 като време, имаше примерно едно 20-на процента където да се забави с 2-3сек най-много търсенето без индекс, ама при 10милиона записа и търсене от около 30-на секунди, 2секунди са си в рамките на статистическата грешка.
Селектирай само датата без текст колоната ;)
Благодаря ти, че се опитваш да ми помогнеш в намирането на разлика, ама и това го пробвах :).
В началото търсех дата и текст, после смених само на дата, а после си изтрих и колоната Id, че и такава имах. Като търсех по дата и виждах в плана, че ползва clustered index scan по PK на Id(което би следвало да е нормално всъщност, нали така?), и затова я затрих и тая колона. Нямаше разлика.
Не знам, сигурно греша някъде, но не успях да разбера къде. Освен разликата при мен наистина да е 2-3сек, но ми се струва нелогично това.