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.