Ce este SQLCheck?
sqlcheck detecteaza automat anti-modelele SQL obisnuite. Astfel de anti-tipare incetinesc adesea interogarile. Prin urmare, adresarea lor va ajuta la accelerarea interogarilor.
sqlcheck vizeaza toate dialectele SQL majore .
Pentru actualizari de dezvoltare privind sqlcheck si stiri generale despre sistemele de baze de date de urmatoarea generatie, urmati-ma la @joy_arulraj.
Ce poate face
Chiar acum SQLCheck poate detecta urmatoarele anti-tipare:
Anti-modele de proiectare a bazelor de date logice
- Atribut cu mai multe valori
- Dependenta recursiva
- Cheia primara nu exista
- Cheie primara generica
- Cheia straina nu exista
- Model Entitate-Atribut-Valoare
- Metadate Tribbles
Anti-modele de proiectare a bazelor de date fizice
- Tip de date imprecis
- Valori in definitie
- Fisierele nu sunt tipuri de date SQL
- Prea multe indexuri
- Ordinea atributului index
Interogare anti-tipare
- SELECTATI *
- Utilizare NULA
- Utilizare NU NULA
- Concatenare sir
- GRUPUL PE UTILIZARE
- COMANDA PRIN RAND Utilizare
- Utilizarea potrivirii modelului
- Alerta privind interogarea spaghetelor
- Reduceti numarul de JOIN-uri
- Eliminati conditiile DISTINTE inutile
- Utilizarea implicita a coloanei
- Utilizarea clauzei avand
- Subinterogari imbricate
- SAU Utilizare
- Utilizarea UNION
- DISTINCT & JOIN Utilizare
Dezvoltarea aplicatiilor anti-tipare
Instalare
UBUNTU / MINT (DEBIAN)
- Descarcati pachetul debian din ultima versiune.
wget https://github.com/jarulraj/sqlcheck/releases/download/v1.2/sqlcheck-x86_64.deb
- Instalati-l executand urmatoarea comanda.
dpkg -i sqlcheck-x86_64.deb
FEDORA / CENTOS (RPM)
- Descarcati pachetul rpm din ultima versiune.
wget https://github.com/jarulraj/sqlcheck/releases/download/v1.2/sqlcheck-x86_64.rpm
- Instalati-l executand urmatoarea comanda.
yum –nogpgcheck localinstall sqlcheck-x86_64.rpm
MAC (DMG)
- Descarcati pachetul dmg din ultima versiune.
wget https://github.com/jarulraj/sqlcheck/releases/download/v1.2/sqlcheck-x86_64.dmg
-
Faceti clic pe dmg pentru a monta pachetul. Aceasta il va monta in directorul Volumes.
-
Deschideti aplicatia Terminal. Aceasta pagina contine mai multe detalii despre gasirea aplicatiei.
-
Copiati peste fisierul binar SQLCheck in directorul local dorit.
cp / Volumes / sqlcheck-x86_64 / bin / sqlcheck / usr / local / bin /
Homebrew
O alta alternativa este utilizarea Homebrew . Iata un robinet scris de @gwerbin:
brew tap gwerbin / tap brew cask install gwerbin / tap / sqlcheck
WINDOWS (EXE)
- Descarcati fisierul exe din ultima versiune.
wget https://github.com/jarulraj/sqlcheck/releases/download/v1.2/sqlcheck.exe
- Deschideti un terminal (cum ar fi cmd.exe) si rulati executabilul.
ZIP
- Descarcati pachetul zip de la ultima versiune.
wget https://github.com/jarulraj/sqlcheck/releases/download/v1.2/sqlcheck-x86_64.zip
- Dezarhivati-l si gasiti binarul SQLCheck (bin / sqlcheck).
dezarhivati sqlcheck-x86_64.zip
COD SURSA
SQLCheck are urmatoarele dependente de software:
- g ++ 4.9+
- cmake (ghid de instalare Cmake)
Mai intai, clonati depozitul (cu optiunea –recursive ).
Apoi, executati urmatoarele comenzi pentru a construi si instala SQLCheck:
./bootstrap cd build cmake -DCMAKE_BUILD_TYPE = RELEASE .. make make install
Utilizare
$ sqlcheck -h Optiuni linie de comanda: sqlcheck <optiuni> -f –file_name: nume fisier -r –risk_level: set de anti-tipare de verificat: 1 (toate anti-tipare, implicit): 2 (numai mediu si inalt anti-pattern-uri de risc): 3 (numai anti-pattern-uri cu risc ridicat) -c –color_mode: color mode -v –verbose_mode: mode verbose
$ sqlcheck -f examples / top_mutexes.sql -v ————————————— ———-> NIVEL DE RISC :: TOATE ANTI-MODELELE> NUME FISIER SQL :: exemple / top_mutexes.sql ——————– —————————– ==================== Rezultate =================== ——————————- —————— Declaratie SQL: cu top_mutexes ca (select – + lider (t1 s1 v1 v2 t2 s2) use_hash (s1) use_nl (v1) use_hash (s2) materializeaza t1.hsecs, s1. *, s2.sleeps as end_sleeps, s2.wait_time as end_wait_time, s2.sleeps-s1.sleeps as delta_sleeps, t2.hsecs – t1.hsecs as delta_hsecs -, s2. * from v $ timer t1, v $ mutex_sleep s1, (select / * + no_merge * / sum (level) a from dual connect by level <= 1e6) v1, v $ timer t2, v $ mutex_sleep s2 where s1.mutex_type = s2.mutex_type and s1 .location = s2.location) selectati * din top_mutexes ordonati prin delta_sleeps desc;
[exemple / top_mutexes.sql]: (RISC INALT) (QUERY ANTI-PATTERN) SELECT * ● Ineficienta in mutarea datelor catre consumator: Cand SELECTATI *, preluati de multe ori mai multe coloane din baza de date decat trebuie intr-adevar aplicatia dvs. functie. Acest lucru face ca mai multe date sa se deplaseze de la serverul bazei de date la client, incetinind accesul si cresterea incarcarii pe masinile dvs., precum si luand mai mult timp pentru a calatori prin retea. Acest lucru este valabil mai ales atunci cand cineva adauga coloane noi la tabelele de baza care nu existau si nu erau necesare atunci cand consumatorii originali si-au codat accesul la date. ● Probleme de indexare: luati in considerare un scenariu in care doriti sa reglati o interogare la un nivel ridicat de performanta. Daca ar fi sa folositi *, iar acesta ar fi returnat mai multe coloane decat aveti de fapt nevoie, serverul ar trebui adesea sa efectueze metode mai scumpe pentru a va prelua datele decat ar putea altfel. De exemplu, nu ati putea crea un index care sa acopere pur si simplu coloanele din lista dvs. SELECT, si chiar daca ati facut-o (inclusiv toate coloanele [tremura]), urmatorul dezvoltator care a venit si a adaugat o coloana la baza tabelul ar face ca optimizatorul sa ignore indexul dvs. de acoperire optimizat si probabil ca veti descoperi ca performanta interogarii dvs. va scadea substantial fara niciun motiv aparent. [Expresie potrivita: selectati *] [exemple / top_mutexes.sql]: (RISC LOW) (QUERY ANTI-PATTERN) Alerta interogare spaghete ● Impartiti o interogare complexa de spaghete in mai multe interogari mai simple: SQL este un limbaj foarte expresiv – puteti realiza mult intr-o singura interogare sau declaratie. Dar asta nu inseamna asta ‘ Este obligatoriu sau chiar o idee buna sa abordati fiecare sarcina, presupunand ca aceasta trebuie facuta intr-o singura linie de cod. O consecinta neintentionata obisnuita a producerii tuturor rezultatelor dvs. intr-o singura interogare este un produs cartezian. Acest lucru se intampla atunci cand doua dintre tabelele din interogare nu au nicio conditie care sa le restrictioneze relatia. Fara o astfel de restrictie, imbinarea a doua tabele imperecheaza fiecare rand din primul tabel cu fiecare rand din celalalt tabel. Fiecare astfel de imperechere devine un rand al setului de rezultate si ajungeti la mai multe randuri decat va asteptati. Este important sa luati in considerare faptul ca aceste interogari sunt pur si simplu greu de scris, greu de modificat si greu de depanat. Ar trebui sa va asteptati sa primiti solicitari regulate de imbunatatiri incrementale ale aplicatiilor bazei de date. Managerii doresc rapoarte mai complexe si mai multe campuri intr-o interfata cu utilizatorul. Daca proiectezi complexe, interogari SQL monolitice, este mai costisitor si consuma mai mult timp sa le aduci imbunatatiri. Timpul tau merita ceva, atat pentru tine, cat si pentru proiectul tau. Impartiti o interogare complexa de spaghete in mai multe interogari mai simple. Cand impartiti o interogare SQL complexa, rezultatul poate fi o multime de interogari similare, variind probabil usor in functie de valorile datelor. Scrierea acestor interogari este o corvoada, deci este o aplicatie buna pentru generarea codului SQL. Desi SQL face posibila rezolvarea unei probleme complexe intr-o singura linie de cod, nu fi tentat sa construiesti o casa de carti. ==================== Rezumat ================== Toate anti-tiparele :: 2> Risc ridicat :: 1> Risc mediu :: 0> Risc scazut :: 1 Impartiti o interogare complexa de spaghete in mai multe interogari mai simple. Cand impartiti o interogare SQL complexa, rezultatul poate fi o multime de interogari similare, variind probabil usor in functie de valorile datelor. Scrierea acestor interogari este o corvoada, deci este o aplicatie buna pentru generarea codului SQL. Desi SQL face posibila rezolvarea unei probleme complexe intr-o singura linie de cod, nu fi tentat sa construiesti o casa de carti. ==================== Rezumat ================== Toate anti-tiparele :: 2> Risc ridicat :: 1> Risc mediu :: 0> Risc scazut :: 1 Impartiti o interogare complexa de spaghete in mai multe interogari mai simple. Cand impartiti o interogare SQL complexa, rezultatul poate fi o multime de interogari similare, variind probabil usor in functie de valorile datelor. Scrierea acestor interogari este o corvoada, deci este o aplicatie buna pentru generarea codului SQL. Desi SQL face posibila rezolvarea unei probleme complexe intr-o singura linie de cod, nu fi tentat sa construiesti o casa de carti. ==================== Rezumat ================== Toate anti-tiparele :: 2> Risc ridicat :: 1> Risc mediu :: 0> Risc scazut :: 1 Desi SQL face posibila rezolvarea unei probleme complexe intr-o singura linie de cod, nu fi tentat sa construiesti o casa de carti. ==================== Rezumat ================== Toate anti-tiparele :: 2> Risc ridicat :: 1> Risc mediu :: 0> Risc scazut :: 1 Desi SQL face posibila rezolvarea unei probleme complexe intr-o singura linie de cod, nu fi tentat sa construiesti o casa de carti. ==================== Rezumat ================== Toate anti-tiparele :: 2> Risc ridicat :: 1> Risc mediu :: 0> Risc scazut :: 1
Referinte
(1) Anti-modele SQL: evitarea capcanelor programarii bazelor de date, Bill Karwin
(2) Anti-modele SQL comune, StackOverflow
Contributii
Contributiile la SQLCheck sunt intotdeauna binevenite. Puteti contribui in diferite moduri:
- Deschideti o problema cu sugestii pentru imbunatatiri si erori cu care va confruntati;
- Furcati acest depozit si trimiteti o cerere de extragere;
- Imbunatatiti documentatia.
Licenta
Licentiat sub licenta Apache.