Top 20 anbefalinger til MySQL

Indholdsfortegnelse

MySQL -databasen er blevet den mest populære open source relationsdatabase i verden på grund af dens høje ydeevne, konsistens, høje pålidelighed og brugervenlighed. Disse fordele, som det giver os, påvirkes dog ofte af den måde, vi arbejder på det.

I denne vejledning lærer du en række tips, som vil være meget nyttige og give os mulighed for at få mest muligt ud af både fra programmørens og databaseadministratorens synspunkt.

Hvilket værktøj vil vi bruge?MySQL -kommandokonsol '] MySQL har et program, kaldet med samme navn som databasen (mysql), der bruges til at styre databasen med kommandolinje.

WindowsDet er i et bibliotek som:

C: \ Program Files \ MySQL \ MySQL Server 5.6 \ bin

Mappen kan variere, for eksempel kan den være placeret i roden af ​​C: disken eller et andet sted, hvor vi muligvis har installeret MySQL. For at få adgang til MySQL -konsollen i Windows skal vi være placeret i denne mappe.

LinuxSe følgende link:

Få adgang til MySQL fra Linux

MacComputere med system Mac OS X de har kommandolinjeterminalen indbygget blandt de tilgængelige applikationer. For at få adgang til den samme kommando bruges som i Linux.

phpMyAdminDet er et gratis softwareværktøj skrevet i PHP, som bruges til at administrere MySQL via Internettet. Hvis du har et lokalt udviklingsmiljø installeret, f.eks. XAMPP eller WAMP, er dette værktøj allerede installeret. Hvis du har en hostingplan med et administrativt panel, tilbyder de fleste af dem dette værktøj som MySQL -databaseadministrator.

[color = rgb (169,169,169)] phpMyAdmin fra XAMPP [/ color]

FORSTØRRE

[color = # a9a9a9] phpMyAdmin fra CPanel [/ color]

Når vi har disse 2 værktøjer ved hånden, kan vi begynde at teste alle disse gode fremgangsmåder, som vi viser nedenfor.

Disse er Top 20 MySQL bedste fremgangsmåder:

1. Navngivningskonvention


Der er kodningsstandarder for hvert programmeringssprog, men i MySQL -termer har vi ikke fundet nogen universel kodningspraksis, som alle følger. Ved at gennemgå flere open source -rammer baseret på PHP filtrerer vi dog nogle generelle applikationsregler, som hjælper os med at skrive SQL -forespørgsler hurtigere, fjerne forvirring og konflikter, både i forespørgslen og i det programmeringssprog, vi bruger.

Generelle reglerHusk følgende regler for at undgå problemer.

  • Brug små bogstaver, da det hjælper dig med at skrive hastighed, det vil undgå fejl i tilfælde af små og store følsomme funktioner osv.
  • Brug ikke mellemrum, brug understregningen (_) i stedet.
  • Brug ikke tal i navnene, kun engelske alfabetiske tegn.
  • Brug gyldige forståelige navne.
  • Navne skal være selvforklarende.
  • Navne må ikke indeholde mere end 64 tegn.
  • Undgå at bruge præfikser.

Regler for databasenavneFølg alle de generelle regler ovenfor.

  • Navnet kan være både ental og flertal, men databasen repræsenterer en database, så det skal være ental så meget som muligt.
  • Undgå præfikser, hvor det er muligt.

Regler for bordnavneBrug små bogstaver til tabelnavne: MySQL er normalt hostet på Linux -servere, det er store og små bogstaver, så den bedste praksis er at lave små bogstaver.

  • Navnene på tabellerne skal være i ental: bordet er en enkelt enhed som modellen, så det er mærkeligt at have bordets navn i flertal.
  • Præfikser i tabelnavnet: Vi har set mange gange, at tabellerne er præfikseret med navnet på databasen eller navnet på projektet. Nogle gange er dette nødvendigt, når vi i vores projekt har mange databaser for at overvinde begrænsningen for nogle hostingudbydere. Men hvis det ikke er nødvendigt, og vores projekt er lille, skal du undgå at bruge præfikser.

Navn på felterneBrug alle ovenstående regler, det vil sige brug små bogstaver, brug ikke tomme mellemrum, brug ikke tal, og undgå præfikser.

  • Brug et eller to korte ord, hvor det er muligt.
  • Navnene på felterne skal kunne forstås, for eksempel: pris, firmanavn osv.
  • Primær kolonnenavn: Primærnøgle kan have id -navn eller tabelnavn _id. Det vil afhænge af valget.
  • Undgå at bruge reserverede ord i felterne: *****, dato osv. I disse tilfælde er det at foretrække at bruge præfikser såsom record_date osv.
  • Undgå at bruge kolonnenavne med det samme tabelnavn. Dette kan forårsage forvirring, når du skriver dine forespørgsler.
  • Undgå navne i forkortede eller sammenkædede akronymer.

2. Brug altid den korrekte datatype


Brug datatyper baseret på datatypen. Brug af irrelevante datatyper kan tage mere plads eller føre til fejl.

EksempelBrug af varchar (20) til at gemme datetime-værdier i stedet for DATETIME kan forårsage fejl under datorelaterede tidsberegninger og er også mulig i tilfælde af ugyldig datalagring.

3. Brug CHAR (1) over VARCHAR (1)


Hvis du gemte en enkelt tegnstreng, brug CHAR (1) i stedet for VARCHAR (1), fordi VARCHAR (1) vil tage en ekstra byte for at gemme oplysninger. Med det skal man tage højde for det, når man administrerer disse tegn.

4. CHAR for faste data


Brug CHAR -data til kun at gemme data med fast længde

Eksempel:

Brug af CHAR (1000) i stedet for VARCHAR (1000) bruger mere plads, hvis dataens længde er mindre end 1000.

5. Undgå at bruge regionale datoformater


Når du bruger datatyper:
  • DATO TID
  • DATO

Brug altid formatet ÅÅÅÅ-MM-DD eller ISO-datoformatet, der passer til din SQL-motor. Andre regionale formater som DD-MM-ÅÅÅ, DD-MM-ÅÅÅÅ gemmes ikke korrekt.

6. Optimer dine anmodninger om cachen


mest af MySQL -servere har cachesystemet aktiveret. Det er en af ​​de mest effektive metoder til at forbedre ydeevnen, som kommer fra databasemotorens hånd. Når den samme anmodning udføres flere gange, hentes resultatet fra cachen, hvilket er meget hurtigere.
Følgende eksempel er i PHP:
 // Cache virker IKKE $ r = mysql_query ("SELECT name FROM users WHERE record> = CURDATE ()"); 
 // Cache VIRKER $ i dag = dato ("Y-m-d"); $ r = mysql_query ("SELECT name FROM users WHERE record> = '$ today'"); 
Grunden til at det ikke virker i det første tilfælde er på grund af brugen af ​​CURDATE (). Det kan anvendes på alle ikke-deterministiske funktioner, såsom NOW () og RAND (). Da resultatet, der returneres af funktionen, kan ændre sig, beslutter MySQL at deaktivere cachen på den forespørgsel.

7. Undgå at bruge "SELECT *" i dine forespørgsler


Som en tommelfingerregel, jo flere data der læses fra tabellerne, jo langsommere foretages der en forespørgsel. I betragtning af at nogle produktionstabeller kan indeholde snesevis af kolonner, hvoraf nogle består af store datatyper, ville det være uklogt at vælge dem alle.

Det er en god vane angiv de nødvendige kolonner i din SELECT -sætning.

8. Brug LIMIT 1 Når du kun vil have en enkelt række


Nogle gange når du forespørger på dine tabeller, og du ved, at du kun har brug for en enkelt række. I disse tilfælde skal du anmode om et enkelt resultat fra databasen, ellers kontrollerer det hvert enkelt af kampene i WHERE -klausulen.

I disse tilfælde kan tilføjelse af LIMIT 1 til din forespørgsel forbedre hastigheden betydeligt. På denne måde stopper databasen med at scanne resultater i det øjeblik den finder en, i stedet for at gå gennem hele tabellen eller et indeks.

 // Jeg har brugere fra Madrid? // hvad man IKKE skal gøre: $ r = mysql_query ("VÆLG * FRA bruger HVOR by = 'Madrid'"); hvis (mysql_num_rows ($ r)> 0) {//…} // meget bedre: $ r = mysql_query ("SELECT 1 FROM user WHERE city = 'Madrid' LIMIT 1"); hvis (mysql_num_rows ($ r)> 0) {//…}
[farve = # a9a9a9]LIMIT anbefaling[/Farve]

9. Brug af ***** BY


Brugen af ***** VED det kan bremse responstiden i miljøer med flere brugere. Så vi anbefaler, at ***** BY -klausulen kun bruges, når det er nødvendigt.

Misbrug ikke dets anvendelse.

10. Vælg passende basismotor


Hvis du udvikler et program, der læser data oftere end at skrive.
(f.eks. søgemaskine), skal du vælge MyISAM -lagermotoren.

Hvis du udvikler et program, der skriver data oftere end at læse
(f.eks. bank i realtid), vælg InnoDB-lagermotoren.

Valg af den forkerte lagermotor påvirker ydelsen af ​​dine forespørgsler.

11. Brug EXISTS -klausulen, når det er nødvendigt


Hvis du vil kontrollere data, må du ikke bruge:
 Hvis (SELECT antal (*) fra tabel WHERE col = 'some value')> 0
Brug i stedet EXISTS -klausulen:
 Hvis EKSISTERES (SELECT * fra tabel WHERE col = 'some value')
Hvilket er hurtigere i responstid.

12. Brug FORKLAR i dine SELECT -forespørgsler


Brug af EXPLAIN -søgeordet vil give dig en masse interne detaljer om, hvad MySQL gør for at udføre din forespørgsel. Dette kan hjælpe dig med at få øje på flaskehalse og andre problemer med din forespørgsel eller bordstruktur.

Resultatet af en FORKLAR forespørgsel viser dig de indekser, der bruges, hvordan tabellen bliver undersøgt, hvordan den bliver bestilt osv.

Vælg en SELECT forespørgsel (helst en kompleks, med joins), og tilføj ordet FORKLAR i begyndelsen af ​​alt. Det returnerer resultaterne i en simpel tabel. Antag for eksempel, at jeg glemte at indeksere en kolonne, det ville vise os følgende skærm:

FORSTØRRE

Efter at have tilføjet indekset til tilstandstabellen ville det se sådan ud:

FORSTØRRE

13. Indekser, og brug den samme type kolonne til Joins


Hvis din applikation indeholder mange JOIN -sætninger, skal du sikre dig, at de kolonner, du deltager i, indekseres i begge tabeller. Dette påvirker hvordan MySQL internt optimerer Deltag i operationer.

Kolonnerne, som du forbinder, skal også være af samme type. Hvis du f.eks. Forbinder en kolonne af typen DECIMAL med en kolonne af typen INT fra en anden tabel, vil MySQL ikke kunne bruge mindst et af de to indekser. Selv tegnkodningen skal være af samme type for kolonnerne String type.

 // leder efter virksomheder i min by $ r = mysql_query ("VÆLG virksomhedsnavn FRA brugere LEFT JOIN companyias ON (users.city = companyias.city) WHERE users.id = $ user_id");
Begge bykolonner skal indekseres, og begge skal være af samme type og tegnkodning, eller MySQL bliver nødt til at foretage en fuld scanning af tabellerne.

14. Brug IKKE NULL, hvis du kan


Medmindre du har en specifik grund til at bruge NULL -værdien, bør du altid indstille dine kolonner til NOT NULL.

Spørg dig selv først, om der ville være en forskel mellem at have en tom streng og en NULL -værdi (eller for INT -felter: 0 versus NULL). Hvis der ikke er noget problem mellem de to værdier, behøver du ikke et NULL -felt. NULL -kolonner kræver ekstra plads og kan tilføje kompleksitet til dine sammenligningssætninger. Bare undgå dem, når du kan.

Under alle omstændigheder forstår vi, at der i nogle meget specifikke tilfælde er en grund til at bruge NULL -kolonner, hvilket ikke altid er en dårlig ting.

15. Tabeller med fast størrelse (statisk) er hurtigere


Når hver kolonne i en tabel har en fast længde, betragtes hele tabellen som "statisk" eller "fast længde".

Nogle eksempler på kolonnetyper, der IKKE har en fast størrelse, er:

  • VARCHAR
  • TEKST
  • BLOB

Hvis du kun medtager en af ​​disse kolonnetyper, vil tabellen ikke længere have en fast størrelse og skal behandles forskelligt af MySQL -motor.

Tabeller i fast størrelse kan øge produktiviteten, fordi det er hurtigere for MySQL-motoren at søge i dine poster. Når du vil læse en bestemt række i tabellen, kan du hurtigt beregne dens position. Hvis rækkestørrelsen ikke er fast, skal du først søge i indekset for den primære nøgle hver gang du skal søge.

De er også lettere at søge og genopbygge efter en ulykke. Men på den anden side kunne de også tage mere plads.

16. Lodret opdeling


Vertikal opdeling er handlingen med at adskille din bordstruktur lodret af optimeringsmæssige årsager.

Eksempel 1:

Du vil helt sikkert have en brugertabel, der indeholder en postadresse, som ikke bruges ret ofte. Her kunne du dele bordet og gemme adresserne i en separat tabel. På denne måde ville dit hovedbrugerbord have en strammere størrelse. Som du ved, jo mindre jo hurtigere bordene.

Eksempel 2:

Du har et "sidste_tilgang" -felt i din tabel. Det opdateres hver gang en bruger får adgang til din side. Men hver adgang bevirker, at forespørgselscachen for tabellen frigøres. Hvad du kan gøre er at sætte dette felt i en anden tabel, så ændringerne i din brugertabel holdes på et minimum.

Men du skal også sørge for, at du ikke konstant behøver at slutte dig til de to borde efter partitionering, eller du vil lide et præstationsfald, lige modsat af det, vi ledte efter.

17. Gemmer IP -adresser som UNSIGNED INT


Mange programmører ville oprette en VARCHAR felt (15) uden at vide, at de kan gemme IP -adresser som hele tal. Når du bruger en INT, bruger du kun 4 bytes i hukommelsen, og den har også en fast størrelse i tabellen.

Men du skal sørge for, at kolonne er UNSIGNED INT (usigneret heltal), fordi IP-adresser gør brug af hele det 32-bit usignerede område.

I dine forespørgsler kan du bruge INET_ATON () funktion at konvertere en IP -adresse til et helt tal, og INET_NTOA () for at gøre det modsatte. Der er også lignende funktioner i PHP kaldet ip2long () Y long2ip ().

18. Opret visninger for at forenkle almindelig brug i tabeller


Visninger hjælper med at forenkle både komplekse skemaer og sikkerhedsimplementering. En måde, de bidrager til sikkerhedsdelen på, er, at det giver dig mulighed for at skjule felternes navne for udviklerne.

Det kan også bruges til at filtrere kolonner, der ikke er indekseret, og kun efterlade de felter, der vises hurtigere i søgningen.

19. Brug ikke ***** efter RAND ()


Dette er et af de tricks, der lyder godt ved første øjekast, og hvor mange nybegyndere, der har programmer, har en tendens til at falde. Du har muligvis ikke indset den utrolige flaskehals, der kan skyldes at bruge denne teknik i dine anmodninger.

Hvis du virkelig har brug for tilfældige tabeller til dit resultat, er der meget bedre måder at gøre det på. Det er klart, at de vil optage mere kode, men du forhindrer en mulig flaskehals, der stiger eksponentielt, når dit indhold vokser.

Problemet er, at MySQL skal køre RAND () (som kræver behandlingskraft) for hver af rækkerne, før de sorteres og returneres en enkelt række.

 // måden IKKE gør det: $ r = mysql_query ("VÆLG brugernavn FRA bruger ***** AF RAND () LIMIT 1"); // meget bedre: $ r = mysql_query ("SELECT count (*) FROM user"); $ d = mysql_fetch_row ($ r); $ rand = mt_rand (0, $ d [0] - 1); $ r = mysql_query ("VÆLG brugernavn FRA brugernavn LIMIT $ rand, 1");
Så du vælger et tilfældigt tal mindre end antallet af resultater og bruger det som forskydningen i LIMIT -klausulen.

20. Optimer WHERE -klausulen


Disse er nogle tips til optimering af WHERE -klausulen:
  • Fjern unødvendige parenteser. For eksempel:
 Fra til5 OG b = c OG a = 5
  • COUNT (*) det er optimeret til at returnere en SELECT meget hurtigere, så længe det er til et bord og uden at bruge WHERE. For eksempel:
 VÆLG TÆLL (*) FRA tabellen.
  • Det Indstilling SQL_SMALL_RESULT, kan bruges med GRUPPE AF eller DISTINCT for at angive, at resultatsættet er lille. I dette tilfælde bruger MySQL meget hurtige midlertidige tabeller til at gemme den resulterende tabel i stedet for at bruge sortering.

MySQL tutorials

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave