Jakiś czas temu Brent Ozar opublikował post opisujący niektóre różnice między SQL Server a PostgreSQL: Dwie ważne różnice między SQL Server a PostgreSQL Pierwszy punkt („CTE to ogrodzenia optymalizacyjne”) przykuł moją uwagę, ponieważ jest oczywiste, że w podanym przykładzie SQL Server łączy CTE i główne zapytanie razem i optymalizuje je …
Krótko mówiąc, aktualizujemy małe tabele osób o wartościach z bardzo dużej tabeli osób. W ostatnim teście uruchomienie tej aktualizacji zajmuje około 5 minut. Natknęliśmy się na coś, co wydaje się najgłupszą możliwą optymalizacją, która na pozór działa idealnie! To samo zapytanie jest teraz uruchamiane w mniej niż 2 minuty i …
Mam tabelę w bazie danych SQL Server z indeksem klastrowym na kluczu podstawowym. Tabela ma 1 milion wierszy. Jeśli usunę 10 000 wierszy z tabeli, czy indeks zostanie zrestrukturyzowany podczas operacji usuwania? Operacja usuwania jest częścią procedury składowanej. Jednocześnie więcej niż jeden klient może wykonywać procedurę przechowywaną, jednak każde pojedyncze …
Według Craiga Ringera : Chociaż zwykle dobrym pomysłem jest utworzenie indeksu w kolumnach kluczy obcych po stronie odniesienia (lub w tym), nie jest to wymagane. Każdy indeks dodać spowalnia operacje DML lekko w dół, więc płacisz koszt wykonania na każdym INSERT, UPDATElub DELETE. Jeśli indeks jest rzadko używany, nie warto …
Używam następujących rekurencyjnych CTE jako minimalnego przykładu, ale ogólnie optymalizator musi używać domyślnych „zgadywanych” liczności dla rekurencyjnych CTE: with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with …
Prowadzę archiwalną bazę danych, która przechowuje dane historyczne w widokach podzielonym na partycje. Kolumna partycjonowania jest datetime. Każda tabela w widoku zawiera jeden miesiąc danych. Ograniczamy zdarzenia w każdej tabeli ograniczeniem sprawdzania w kolumnie datetime. Dzięki temu optymalizator może ograniczyć tabele wyszukiwane w zapytaniach filtrujących kolumnę daty i godziny zdarzenia. …
W projekcie, nad którym pracuję, każda zmiana wierszy w niektórych tabelach bazy danych musi być śledzona w celu dalszego audytu lub wycofania. Musi być łatwo ustalić, kto zmodyfikował wiersz, z którego adresu IP i kiedy, i móc przywrócić poprzednią wersję. Podobna rzecz jest używana na przykład przez Stack Exchange. Kiedy …
Podczas dodawania NOT NULLkolumn z DEFAULTwartością - czy PostgreSQL optymalizuje tę operację? W przypadku, gdy tabela ma n wierszy, niezoptymalizowana kolumna alter-table-add-kolumna dałaby n zapisów wartości domyślnej - co oczywiście może być bardzo bolesne. Dzięki optymalizacji DB utworzy natychmiast nową kolumnę, zapisze tylko jedną kopię wartości domyślnej, która zostanie zwrócona, …
Rozważ to zapytanie, które składa się z Nsamodzielnego łączenia: select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id Tworzy plan wykonania z N skanami indeksów klastrowych i łączeniami łączenia N-1. Szczerze mówiąc, nie widzę żadnych …
Konwersja zwykłej kolumny na utrwaloną kolumnę obliczeniową powoduje, że to zapytanie nie może wyszukiwać indeksu. Dlaczego? Testowane na kilku wersjach SQL Server, w tym 2016 SP1 CU1. Repros Z kolumną obliczeniową Ze zwykłą kolumną Problem polega na tym table1, że col7. Tabele i zapytania są częściową (i uproszczoną) wersją oryginałów. …
Wiem, że jeśli chodzi o użycie indeksu lub skanowania tabeli, SQL Server używa statystyk, aby zobaczyć, który jest lepszy. Mam stół z 20 milionami wierszy. Mam indeks na (SnapshotKey, Measure) i to zapytanie: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand Kwerenda zwraca …
Muszę zoptymalizować SELECTinstrukcję, ale SQL Server zawsze skanuje indeks zamiast wyszukiwania. Oto zapytanie, które oczywiście znajduje się w procedurze przechowywanej: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR …
Edytowane: Dlaczego raportowanie sesji jest blokowane, ale czeka z PAGELATCH_*, a nie LCK_M_powiązane typy oczekiwania? Wcześniej zakładałem, że SQL Server zgłasza tylko sesje blokujące w kolumnie blocking_session_Id. Jeśli zablokowane sesje czekały na logiczną blokadę, a nie na nic innego, jak np PAGELATCH_*.
Oświadczenie: przepraszam za brak wiedzy na temat wewnętrznych elementów bazy danych. Oto jest: Uruchamiamy aplikację (nie napisaną przez nas), która ma duży problem z wydajnością podczas okresowego zadania czyszczenia w bazie danych. Zapytanie wygląda następująco: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.