Top 20 ieteikumi MySQL

Satura rādītājs

Pateicoties augstajai veiktspējai, konsekvencei, augstajai uzticamībai un izmantošanas ērtībai, MySQL datu bāze ir kļuvusi par populārāko atvērtā pirmkoda relāciju datu bāzi pasaulē. Tomēr šīs priekšrocības, ko tas mums piedāvā, bieži ietekmē veids, kā mēs pie tā strādājam.

Šajā apmācībā jūs uzzināsit virkni padomu, kas būs ļoti noderīgi un ļaus mums iegūt maksimālu labumu gan no programmētāja, gan datu bāzes administratora viedokļa.

Kādu rīku mēs izmantosim?MySQL komandu konsole '] MySQL ir programma ar tādu pašu nosaukumu kā datu bāzei (mysql), ko izmanto, lai pārvaldītu datu bāzi, izmantojot komandrindu.

WindowsTas atrodas direktorijā, piemēram:

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

Katalogs var atšķirties, piemēram, tas var atrasties C: diska saknē vai jebkurā citā vietā, kur, iespējams, esam instalējuši MySQL. Lai piekļūtu MySQL konsolei sistēmā Windows, mums jāatrodas šajā direktorijā.

LinuxSkatiet šo saiti:

Piekļūstiet MySQL no Linux

MacDatori ar sistēmu Mac OS X starp pieejamajām lietojumprogrammām ir iebūvēts komandrindas terminālis. Lai piekļūtu, tiek izmantota tā pati komanda kā Linux.

phpMyAdminTas ir bezmaksas programmatūras rīks, kas rakstīts PHP formātā un tiek izmantots MySQL administrēšanai, izmantojot internetu. Ja jums ir instalēta vietējā izstrādes vide, piemēram, XAMPP vai WAMP, šis rīks jau būs instalēts. Ja jums ir mitināšanas plāns ar administratīvo paneli, lielākā daļa no viņiem piedāvā šo rīku kā MySQL datu bāzes administrators.

[krāsa = rgb (169 169 169)] phpMyAdmin no XAMPP [/ krāsa]

PALIELINĀT

[color = # a9a9a9] phpMyAdmin no CPanel [/ krāsa]

Ja šie divi rīki ir pie rokas, mēs varam sākt pārbaudīt visas šīs labās prakses, kuras mēs parādām tālāk.

Šie ir Top 20 MySQL paraugprakses:

1. Nosaukuma konvencija


Katrai programmēšanas valodai ir kodēšanas standarti, taču MySQL izteiksmē mēs neesam atraduši nevienu universālu kodēšanas praksi, ko visi ievēro. Tomēr, pārskatot vairākus atvērtā pirmkoda ietvarus, kuru pamatā ir PHP, mēs filtrējam dažus vispārīgus lietojuma noteikumus, kas mums palīdzēs ātrāk rakstīt SQL vaicājumus, novērsīs neskaidrības un konfliktus gan vaicājumā, gan mūsu izmantotajā programmēšanas valodā.

Vispārīgi noteikumiPaturiet prātā šādus noteikumus, lai izvairītos no problēmām.

  • Izmantojiet mazos burtus, jo tas palīdz ievadīt ātrumu, tas ļaus izvairīties no kļūdām, ja funkcijas ir jutīgas pret mazajiem un lielajiem burtiem utt.
  • Nelietojiet atstarpes, tā vietā izmantojiet pasvītrojumu (_).
  • Nosaukumos neizmantojiet ciparus, tikai angļu alfabēta rakstzīmes.
  • Izmantojiet derīgus saprotamus nosaukumus.
  • Nosaukumiem jābūt pašsaprotamiem.
  • Nosaukumos nedrīkst būt vairāk par 64 rakstzīmēm.
  • Izvairieties no prefiksu lietošanas.

Noteikumi datu bāzu nosaukumiemIevērojiet visus iepriekš minētos vispārīgos noteikumus.

  • Nosaukums var būt gan vienskaitlis, gan daudzskaitlis, bet datu bāze attēlo datubāzi, tāpēc tai pēc iespējas vajadzētu būt vienskaitlī.
  • Ja iespējams, izvairieties no prefiksiem.

Noteikumi tabulu nosaukumiemTabulu nosaukumiem izmantojiet mazos burtus: MySQL parasti tiek mitināts Linux serveros, ir reģistrjutīgi, tāpēc paraugprakse ir mazo burtu tabulu nosaukumi.

  • Tabulu nosaukumiem jābūt vienskaitlī: tabula ir viena vienība, tāpat kā modelis, tāpēc ir dīvaini, ja tabulas nosaukums ir daudzskaitlī.
  • Prefiksi tabulas nosaukumā: Mēs daudzas reizes esam redzējuši, ka tabulām ir pievienots datubāzes nosaukums vai projekta nosaukums. Dažreiz tas ir nepieciešams, ja mūsu projektā mums ir daudz datu bāzu, lai pārvarētu dažu mitināšanas pakalpojumu sniedzēju ierobežojumus. Bet, ja tas nav nepieciešams un mūsu projekts ir mazs, izvairieties no prefiksu lietošanas.

Lauku nosaukumsIzmantojiet visus iepriekš minētos noteikumus, tas ir, izmantojiet mazos burtus, neizmantojiet tukšas vietas, neizmantojiet ciparus un izvairieties no prefiksiem.

  • Ja iespējams, izmantojiet vienu vai divus īsus vārdus.
  • Lauku nosaukumiem jābūt saprotamiem, piemēram: cena, uzņēmuma_nosaukums utt.
  • Primārās kolonnas nosaukums: primārajai atslēgai var būt id nosaukums vai tabulas nosaukums _id. Tas būs atkarīgs no izvēles.
  • Neizmantojiet rezervētos vārdus laukos: *****, datums utt. Šādos gadījumos vēlams izmantot prefiksus, piemēram, ieraksta_datums utt.
  • Neizmantojiet kolonnu nosaukumus ar tādu pašu tabulas nosaukumu. Rakstot vaicājumus, tas var radīt neskaidrības.
  • Izvairieties no nosaukumiem saīsinātos vai savienotos akronīmos.

2. Vienmēr izmantojiet pareizo datu tipu


Izmantojiet datu veidus, pamatojoties uz datu raksturu. Neatbilstošu datu veidu izmantošana var aizņemt vairāk vietas vai izraisīt kļūdas.

PiemērsVarchar (20) izmantošana, lai saglabātu datuma un laika vērtības, nevis DATETIME, var izraisīt kļūdas ar datumu saistītā laika aprēķinos, un tas ir iespējams arī nepareizas datu glabāšanas gadījumā.

3. Izmantojiet CHAR (1) virs VARCHAR (1)


Ja saglabājāt vienu rakstzīmju virkni, izmantot CHAR (1) VARCHAR (1) vietā, jo VARCHAR (1) informācijas glabāšanai būs nepieciešams papildu baits. Ar ko to ņemt vērā, pārvaldot šīs rakstzīmes.

4. CHAR fiksētiem datiem


Izmantojiet CHAR datus, lai saglabātu tikai fiksēta garuma datus

Piemērs:

CHAR (1000) izmantošana VARCHAR (1000) vietā patērē vairāk vietas, ja datu garums ir mazāks par 1000.

5. Izvairieties no reģionālo datumu formātu izmantošanas


Izmantojot datu veidus:
  • DATUMS LAIKS
  • DATUMS

Vienmēr izmantojiet formātu GGGG-MM-DD vai jūsu datoram atbilstošo ISO datuma formātu. Citi reģionālie formāti, piemēram, DD-MM-YYY, DD-MM-YYYY, netiks pareizi saglabāti.

6. Optimizējiet kešatmiņas pieprasījumus


Lielākā daļa MySQL serveros ir iespējota kešatmiņas sistēma. Tā ir viena no visefektīvākajām metodēm veiktspējas uzlabošanai, kas nāk no datu bāzes dzinēja rokas. Ja viens un tas pats pieprasījums tiek izpildīts vairākas reizes, rezultāts tiek ielādēts no kešatmiņas, kas ir daudz ātrāk.
Šis piemērs ir PHP:
 // Kešatmiņa nedarbojas $ r = mysql_query ("SELECT name FROM users WHERE record> = CURDATE ()"); 
 // Kešatmiņa DARA $ šodien = datums ("Y-m-d"); $ r = mysql_query ("SELECT name FROM users WHERE record> = '$ today'"); 
Iemesls, kāpēc tas nedarbojas pirmajā gadījumā, ir CURDATE () izmantošana. To var izmantot visām nenoteiktām funkcijām, piemēram, NOW () un RAND (). Tā kā funkcijas atgrieztais rezultāts var mainīties, MySQL nolemj atspējot kešatmiņu šajā vaicājumā.

7. Neizmantojiet vaicājumu “SELECT *”


Parasti, jo vairāk datu tiek nolasīti no tabulām, jo ​​lēnāk tiek veikts vaicājums. Ņemot vērā, ka dažās ražošanas tabulās var būt desmitiem kolonnu, no kurām dažas veido lieli datu tipi, nebūtu prātīgi tās visas atlasīt.

Tas ir labs ieradums norādiet nepieciešamās slejas priekšrakstā SELECT.

8. Izmantojiet LIMIT 1, ja vēlaties tikai vienu rindu


Dažreiz, kad vaicājat tabulas un zināt, ka jums ir nepieciešama tikai viena rinda. Šādos gadījumos jums ir jāpieprasa viens rezultāts no datu bāzes, pretējā gadījumā tā pārbaudīs katru no WHERE klauzulas atbilstībām.

Šādos gadījumos LIMIT 1 pievienošana vaicājumam var ievērojami uzlabot ātrumu. Tādā veidā datu bāze pārtrauks skenēt rezultātus, tiklīdz tā atradīs, nevis iet cauri visai tabulai vai indeksam.

 // Vai man ir lietotāji no Madrides? // ko NEDRĪKST darīt: $ r = mysql_query ("SELECT * FROM user WHERE city =‘ Madrid ’”); if (mysql_num_rows ($ r)> 0) {//…} // daudz labāk: $ r = mysql_query ("SELECT 1 FROM user WHERE city =‘ Madrid ’LIMIT 1"); ja (mysql_num_rows ($ r)> 0) {//…}
[krāsa = # a9a9a9]LIMIT ieteikums[/Krāsa]

9. Izmantot ***** BY


Pielietojums ***** BY tas var palēnināt reakcijas laiku vairāku lietotāju vidēs. Tāpēc mēs iesakām ***** BY klauzulu izmantot tikai nepieciešamības gadījumā.

Neizmantojiet to ļaunprātīgi.

10. Izvēlieties piemērotu bāzes motoru


Ja izstrādājat lietojumprogrammu, kas datus lasa biežāk nekā rakstot.
(piemēram: meklētājprogramma), izvēlieties MyISAM krātuves dzinēju.

Ja izstrādājat lietojumprogrammu, kas datus raksta biežāk nekā lasot
(piemēram: reāllaika banku pakalpojumi), izvēlieties InnoDB uzglabāšanas dzinēju.

Nepareiza uzglabāšanas dzinēja izvēle ietekmēs jūsu vaicājumu veiktspēju.

11. Ja nepieciešams, izmantojiet klauzulu EXISTS


Ja vēlaties pārbaudīt datus, neizmantojiet:
 Ja (SELECT count (*) no tabulas WHERE col = 'kāda vērtība')> 0
Tā vietā izmantojiet klauzulu EXISTS:
 Ja eksistē (SELECT * no tabulas WHERE col = 'kāda vērtība')
Kas ir ātrāks reakcijas laikā.

12. Izmantojiet EXPLAIN savos SELECT vaicājumos


Izmantojot EXPLAIN atslēgvārdu, jūs iegūsit daudz iekšējas informācijas par to, ko MySQL dara, lai izpildītu jūsu vaicājumu. Tas var palīdzēt pamanīt vājās vietas un citas vaicājuma vai tabulas struktūras problēmas.

EXPLAIN vaicājuma rezultāts parādīs indeksus, kas tiek izmantoti, kā tiek pētīta tabula, kā tā tiek pasūtīta utt.

Atlasiet vaicājumu SELECT (vēlams sarežģītu, ar savienojumiem) un visa sākumā pievienojiet vārdu EXPLAIN. Rezultāti tiks parādīti vienkāršā tabulā. Piemēram, pieņemsim, ka esmu aizmirsis indeksēt kolonnu, tas mums parādītu šādu ekrānu:

PALIELINĀT

Pēc indeksa pievienošanas stāvokļa tabulai tas izskatītos šādi:

PALIELINĀT

13. Indeksējiet un pievienošanai izmantojiet tāda paša veida kolonnas


Ja jūsu lietojumprogrammā ir daudz JOIN paziņojumu, jums jāpārliecinās, vai kolonnas, kurām pievienojaties, ir indeksētas abās tabulās. Tas ietekmē to, kā MySQL iekšēji optimizē JOIN operācijas.

Turklāt kolonnām, kurām pievienojaties, jābūt viena veida. Piemēram, ja jūs pievienojat DECIMAL tipa kolonnu ar INT tipa kolonnu no citas tabulas, MySQL nevarēs izmantot vismaz vienu no diviem indeksiem. Pat rakstzīmju kodējumam ir jābūt tāda paša veida kolonnām Stīgu veids.

 // meklēju uzņēmumus savā pilsētā $ r = mysql_query ("SELECT company_name FROM users LEFT JOIN companyian ON (users.city = companyias.city) WHERE users.id = $ user_id");
Abām pilsētas kolonnām jābūt indeksētām, un abām jābūt vienāda veida un rakstzīmju kodējumam, pretējā gadījumā MySQL būs jāveic pilna tabulu skenēšana.

14. Ja iespējams, izmantojiet NOT NULL


Ja vien jums nav konkrēta iemesla NULL vērtības izmantošanai, vienmēr iestatiet slejas uz NOT NULL.

Vispirms pajautājiet sev, vai būtu atšķirība starp tukšu virkni un vērtību NULL (vai laukiem INT: 0 pret NULL). Ja starp abām vērtībām nav problēmu, jums nav nepieciešams NULL lauks. NULL kolonnām ir nepieciešama papildu vieta, un tās var sarežģīt jūsu salīdzinājuma paziņojumus. Vienkārši izvairieties no tiem, kad vien varat.

Jebkurā gadījumā mēs saprotam, ka dažos ļoti īpašos gadījumos ir iemesls izmantot kolonnas NULL, kas ne vienmēr ir slikti.

15. Fiksēta izmēra tabulas (statiskas) ir ātrākas


Ja katra tabulas kolonna ir noteikta garuma, visa tabula tiek uzskatīta par “statisku” vai “fiksēta garuma”.

Daži kolonnu tipu piemēri, kas nav fiksēta izmēra, ir šādi:

  • VARCHAR
  • TEKSTS
  • BLOB

Ja iekļaujat tikai vienu no šiem kolonnu veidiem, tabula vairs nebūs fiksēta izmēra, un tā būs jāapstrādā atšķirīgi MySQL dzinējs.

Fiksēta izmēra tabulas var palielināt produktivitāti, jo MySQL dzinējs ātrāk meklē jūsu ierakstus. Ja vēlaties izlasīt noteiktu tabulas rindu, varat ātri aprēķināt tās pozīciju. Ja rindas lielums nav fiksēts, katru reizi, kad jums jāveic meklēšana, vispirms ir jājautā primārās atslēgas indekss.

Viņus ir arī vieglāk meklēt un atjaunot pēc negadījuma. Bet, no otras puses, tie varētu arī aizņemt vairāk vietas.

16. Vertikālā sadalīšana


Vertikālā sadalīšana ir tabulas struktūras atdalīšana vertikāli optimizācijas apsvērumu dēļ.

1. piemērs:

Jums noteikti būs lietotāju tabula, kurā ir pasta adrese, kas netiek izmantota ļoti bieži. Šeit jūs varat sadalīt tabulu un saglabāt adreses atsevišķā tabulā. Tādā veidā jūsu galvenajai lietotāja tabulai būtu stingrāks izmērs. Kā jūs zināt, jo mazāks, jo ātrāk galdi.

2. piemērs:

Jūsu tabulā ir lauks "last_access". Tas tiek atjaunināts katru reizi, kad lietotājs piekļūst jūsu lapai. Bet katra piekļuve izraisa šīs tabulas vaicājuma kešatmiņas atbrīvošanu. Jūs varat ievietot šo lauku citā tabulā, lai izmaiņas lietotāja tabulā būtu minimālas.

Bet jums ir arī jāpārliecinās, ka jums nav nepārtraukti jāpievienojas abām tabulām pēc sadalīšanas, pretējā gadījumā jūs cietīsit veiktspējas kritumu, tieši pretēji tam, ko meklējām.

17. Saglabā IP adreses kā UNIIGNED INT


Daudzi programmētāji izveidotu a VARCHAR lauks (15) neapzinoties, ka tās var saglabāt IP adreses kā veselus skaitļus. Izmantojot INT, atmiņā tiek izmantoti tikai 4 baiti, un tabulā tam ir arī noteikts lielums.

Bet jums ir jāpārliecinās, ka kolonna ir neparakstīta INT (neparakstīts vesels skaitlis), jo IP adreses izmanto visu 32 bitu neparakstīto diapazonu.

Savos vaicājumos varat izmantot Funkcija INET_ATON () lai IP adresi pārvērstu par veselu skaitli, un INET_NTOA () rīkotos pretēji. PHP ir arī līdzīgas funkcijas ar nosaukumu ip2long () Y long2ip ().

18. Izveidojiet skatus, lai vienkāršotu tabulu parasto lietošanu


Skati palīdz vienkāršot gan sarežģītas shēmas, gan drošības ieviešanu. Viens no veidiem, kā tie veicina drošības daļu, ir tas, ka tas ļauj paslēpt lauku nosaukumus no izstrādātājiem.

To var arī izmantot, lai filtrētu neindeksētās kolonnas, atstājot tikai tos laukus, kas meklēšanā tiek parādīti ātrāk.

19. Nelietot ***** BY RAND ()


Šis ir viens no tiem trikiem, kas no pirmā acu uzmetiena izklausās lieliski un kurā daudzi iesācēji programmētāji mēdz krist. Jūs, iespējams, neesat sapratuši neticamo sašaurinājumu, ko var izraisīt šīs tehnikas izmantošana jūsu pieprasījumos.

Ja jūsu rezultātam patiešām ir vajadzīgas izlases tabulas, ir daudz labāki veidi, kā to izdarīt. Ir skaidrs, ka tie aizņems vairāk koda, taču jūs novērsīsit iespējamo sašaurinājumu, kas palielinās eksponenciāli, pieaugot jūsu saturam.

Problēma ir tā, ka MySQL būs jāpalaiž RAND () (kas prasa apstrādes jaudu) katrai rindai pirms to kārtošanas un vienas rindas atgriešanas.

 // veids, kā to nedarīt: $ r = mysql_query ("SELECT userername FROM user ***** BY RAND () LIMIT 1"); // daudz labāk: $ r = mysql_query ("SELECT count (*) FROM user"); $ d = mysql_fetch_row ($ r); $ rand = mt_rand (0, $ d [0] - 1); $ r = mysql_query ("IZVĒLĒTIES lietotājvārdu no lietotājvārda LIMIT $ rand, 1");
Tātad jūs izvēlaties nejaušu skaitli, kas ir mazāks par rezultātu skaitu, un izmantojiet to kā nobīdi LIMIT klauzulā.

20. Optimizējiet klauzulu WHERE


Šie ir daži padomi, kā optimizēt klauzulu WHERE:
  • Noņemiet nevajadzīgās iekavas. Piemēram:
 No uz5 UN b = c UN a = 5
  • COUNT (*) tas ir optimizēts, lai SELECT atgrieztos daudz ātrāk, ja vien tas atrodas tabulā un neizmantojot WHERE. Piemēram:
 SELECT COUNT (*) FROM tabulā.
  • SQL_SMALL_RESULT iespēja, var izmantot ar GROUP BY vai ATŠĶIRT lai norādītu, ka rezultātu kopa ir maza. Šajā gadījumā MySQL izmanto ļoti ātras pagaidu tabulas, lai uzglabātu iegūto tabulu, nevis kārtotu.

MySQL apmācības

wave wave wave wave wave