Przyspieszamy

https://xpil.eu/xiUt1

Ostrzeżenie: ten wpis dotyczy języka zapytań SQL. Jeżeli nie znasz SQL-a, lektura tego wpisu będzie dla Ciebie tak samo fascynująca jak czytanie wspak chińskiego przekładu "Baśni z tysiąca i jednej nocy".

Pisałem jakiś czas temu o programie SQL Prompt firmy RedGate. Wspomniałem tam o możliwości pisania własnych snippetów - dziś wrzucę na ruszt listę snippetów mojego autorstwa, z których korzystam na co dzień, i które skracają mi czas pisania kodu SQL niemal o rząd wielkości.

Zaskakujące jest to, że nie ma tego zbyt wiele - prawda jest bowiem taka, że większośc kodu SQL to powielane schematy i naprawdę trudno wymyśleć coś nowego. Jak by się człowiek mocno postarał, jest w stanie zakodować prawie dowolną logikę biznesową za pomocą instrukcji czterech typów (SELECT, UPDATE, INSERT, DELETE), a cała reszta to rzeczy używane w może pięciu procentach kodu (co nie znaczy, że mniej ważne - po prostu rzadziej używane).

OK, zaczynamy.

CVC: CONVERT(VARCHAR,

Czasem musimy wysłać jakąś informację do logu. Log na ogół łyka informacje tekstowe. Szybka konwersja czegokolwiek na tekst jest bardzo przydatna, tym bardziej, że klawisze "C" i "V" są po sąsiedzku.

GB: GROUP BY

Maleństwo, ale gdy piszemy dużo zapytań agregujących, zaskakująco przydatne maleństwo.

INN: IS NOT NULL

Również niewielki ale bardzo poręczny snippet.

NL: WITH ( NOLOCK )

Wysyłając zapytania ad-hoc do serwera produkcyjnego (zakładając, że w ogóle mamy do niego dostęp!), często zapominamy dodać tą opcję do każdej tabeli, dzięki czemu możemy w łatwy sposób doprowadzić serwer do czkawki. Oczywiście można zamiast tego na początku dać SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED i problem z głowy.

STILRU: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Patrz komentarz powyżej.

OB: ORDER BY

Wbrew pozorom bardzo przydatna pchełka.

OID: OBJECT_NAME([object_id])

Do wyłuskania nazwy tabeli / procedury na podstawie jej identyfikatora. Przydaje się od czasu do czasu przy zapytaniach do metadanych.

OM4: OPTION (MAXDOP 4)

Święty Graal wszystkich zapytań ad-hoc do serwerów produkcyjnych. czwórkę trzeba oczywiście zastąpić czymś adekwatym do naszego środowiska. Wyobraźmy sobie, że przez pomyłkę wysyłamy zapytanie SELECT * from T, T, gdzie T jest tabelą z setką miliardów rekordów. Serwer kucnie od razu. A jak zrobimy SELECT * FROM T, T OPTION (MAXDOP 4), możemy dziada ubić bez większego stresu, a reszta zapytań wykonujących się w tym samym czasie pójdzie bezboleśnie.

SSO: SELECT * FROM sys.objects WITH ( NOLOCK ) WHERE [name] LIKE '%$CURSOR$%'

Przydatne do wyszukania obiektu, którego fragment nazwy pamiętamy.

UAS: UNION ALL SELECT

Jeżeli często piszemy zapytania typu UNION, bardzo przydatne.

STH: SELECT TOP 100 * FROM

Do wybrania próbki rekordów z tabeli.

I teraz najważniejsze: żaden z powyższych snippetów sam w sobie nie jest jakąś rewolucją. Jednak gdy piszemy dużo kodu SQL, opanowanie i używanie wszystkich tych skrótów naprawdę znakomicie skraca czas potrzebny na napisanie zapytania.

Przykład:

Chcemy sprawdzić jakie z grubsza dane (kolumny, próbka danych i tak dalej) siedzą w tabeli X na serwerze produkcyjnym. Zapytanie wygląda mniej więcej tak:

SELECT TOP 100 * FROM X WITH (NOLOCK) ORDER BY order_date OPTION (MAXDOP 4)

Zobaczmy teraz jak to wygląda "na dopalaczach"

sth<tab>X<spacja>NL<tab>OB<tab>order_date<spacja>OM4<tab>

Zapytanie bez "dopalaczy" wymaga naciśnięcia 75 klawiczy. Identyczne zapytanie "na dopalaczach" to zaledwie 27 klawiszy, z czego 6 to spacje bądź tabulatory.

Inny przykład:

Chcemy znaleźć wszystkie obiekty w bazie, które mają w nazwie słowo "customer". Zapytanie wygląda - mniej więcej - o tak:

SELECT * FROM sys.objects WITH ( NOLOCK ) WHERE name LIKE '%customer%' OPTION  ( MAXDOP 4 )

Mając do dyspozycji snippet SSO, piszemy:

SSO<tab>customer

Z 91 klawiszy zeszliśmy do 12.

Oczywiście wszystko zależy od tego jak często szukamy obiektów po fragmencie ich nazwy, ale chodzi o pokazanie ogólnej zasady.

Jak już nadmieniłem, przedstawionych tutaj snippetów nie znajdzie się w standardowej instalacji SQL Prompt i trzeba je sobie dopisać samemu. Gorąco zachęcam do eksperymentowania i tworzenia własnych snippetów - każdy programista ma swój styl i może potrzebować czegoś innego. Ciekawe snippety proszę zamieszczać w komentarzach - może inni skorzystają.

Dziś zamiast kawału coś z kulinariów. Przepis Jacka Sawaszkiewicza na katrzany po grenghalsku:

Dorosłego dojonia upolować przed zapadnięciem zmroku i odłożyć do lodówki na dobę. Następnie zedrzeć z niego powłokę zewnętrzną i wypatroszyć. Ostrożnie, by nie uszkodzić chrąszczy i speletu, wyłuskać katrzany, wydłutować z obu pładni, przykrąpić, pogrępolić i wydrypić.

Nie uszkodzone chrąszcze i spelet posiekać, doprawić. Zagotować w piętnastoprocentowej solance, dodać sto gramów borugdu. Wcholastowić, zamusklać i roztorbolić z wydrypionymi uprzednio katrzanami. Polać strumplem ertolskim.

Smacznego!

https://xpil.eu/xiUt1

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.