Ostatnio zderzyłem się z wydajnością jednej z procedur składowanej (ang. stored procedure), a mianowicie - łączenie tabeli z inną tabelą po kolumnie tupy NVARCHAR(MAX) daje bardzo słabą wydajność prz >1k rekordów w tabeli. Teraz każdy może powiedzieć - no panie, wiadomo że trzeba założyć indeksy :-) I macie racje, tylko że SQL Server nie pozwala tworzyć indeks na gdy rozmiar wszystkich kolumn w indeksie przekracza 900 bajtów (link). A więc zaczęłem myśleć i szukać rozwiązania.
Bazy danych i XML 2957 dni, 19 godzin, 37 minut temu 240 źrodło rozwiń
Witam serdecznie, po zmaganiach z architekturą oraz logowaniem użytkownika, zbliżamy się nieubłaganie do implementowania pierwszych widoków aplikacji. Zanim to jednak nastąpi warto omówić jeszcze jeden temat, który nie będzie ściśle związany z logiką biznesową. Projektując wszelkiego rodzaju systemy informatyczne zdarza się (niestety często), że proces „tworzenia” bazy danych kończy się po wykreowaniu odpowiedniej jej struktury. Model fizyczny jest spójny, generujemy zapytania SQL, execute i gotowe. Czy...
Bazy danych i XML 3159 dni, 7 godzin, 27 minut temu 244 źrodło rozwiń
W trakcie mojej niedawnej prezentacji poświęconej technologii in-memory OLTP w systemie SQL Server 2014 padło pytanie (w pełni zasadne), czy w związku z wprowadzeniem na potrzeby definiowania tabel in-memory możliwości definiowania indeksów inline w składni polecenia CREATE TABLE podobne definiowanie indeksów będzie możliwe dla tradycyjnych tabel. Okazuje się, że tak. W dokumentacji SQL Server 2014 w części poświęconej nowościom w silniku bazodanowym została wymieniona specyfikacja indeks...
Bazy danych i XML 3990 dni, 20 godzin, 12 minut temu 139 źrodło rozwiń
Prosta zagadka. Rozważmy następującą tabelą z dwoma kolumnami: CREATE TABLE Test ( ID Int IDENTITY(1,1) PRIMARY KEY, Name CHAR(10) ) CREATE INDEX IXTESTNAME ON dbo.Test (Name) Teraz na wejściu dostajemy pewien ciąg znaków i przechowujemy go w zmiennej: DECLARE @Variable CHAR(10); SET @Variable = '1234567890'; Chcemy znaleźć wszystkie te rekordy, dla których N pierwszych znaków w kolumnie Name jest takie samo jak N pierwszych znaków w zadanym ciągu. Można to zrobić tak (N=3)...
Bazy danych i XML 4096 dni, 23 godziny, 14 minut temu 211 źrodło rozwiń
Myślałem trochę nad tematami na następne wpisy i sądzę, że jest sporo tematów, nad którymi wypada się pochylić, zarówno tematów dla DBA/DEV, jak i tematów z zakresu Business Intelligence. Pierwszy temat wpadł mi do głowy przy okazji przygotowywania prezentacji na 61. spotkanie warszawskiego oddziału PLSSUG (Polish SQL Server User Group). Wspólnie z Małgosią Borzęcką zaprezentowałem wprowadzenie do indeksów columnstore. W zasadzie chyba używając słowa “wprowadzenie” dokonałem nadużycia :-) Sesja miała co...
Bazy danych i XML 4558 dni, 9 godzin, 11 minut temu 90 źrodło rozwiń
Załóżmy, że mamy tabelę z kolumną typu VARCHAR(2500), a w niej sporo wierszy. Wynik zapytania z tej tabeli chcielibyśmy posortować według wspomnianej kolumny. Oczywiście będzie to bardzo czasochłonne, a tym samym słabo wydajne. Jak sobie z tym poradzić?
Bazy danych i XML 4638 dni, 17 godzin, 8 minut temu 183 źrodło rozwiń
Może wydarzyć się sytuacja, że zajdzie konieczność utworzenia unikalnego klucza na kolumnie typu tekstowego (CHAR lub VARCHAR). W tym momencie warto nadmienić, iż każdy znak zajmie wtedy 1 bajt. Jeśli zaś będzie to typ danych unicode (NCHAR lub NVARCHAR), to znak zapisany będzie na 2 bajtach pamięci. Dlaczego o tym wspominam? Ponieważ jeśli wielkość indeksu przekroczy magiczną granicę 900 bajtów pojawia się Error 1946...
Bazy danych i XML 4923 dni, 22 godziny, 34 minuty temu 92 źrodło rozwiń
Może nie do końca związane z .NET, ale może się przydać: Marcin Chyłek: Wiele osób zaczynających programowanie wykorzystują w swoich aplikacjach bazy danych. Przy projekcie struktury jak i strojeniu zapytań SQL zawsze stykają się z terminem indeksów i kluczy. Chciałbym w krótki sposób przedstawić i pokazać na przykładach wykorzystanie indeksów i kluczy w bazach dany...
Bazy danych i XML 5673 dni, 2 godziny, 42 minuty temu 112 źrodło rozwiń