- 1. Namnkonvention
- 2. Använd alltid rätt datatyp
- 3. Använd CHAR (1) över VARCHAR (1)
- 4. CHAR för fasta data
- 5. Undvik att använda regionala datumformat
- 6. Optimera dina förfrågningar om cachen
- 7. Undvik att använda "SELECT *" i dina frågor
- 8. Använd LIMIT 1 När du bara vill ha en enda rad
- 9. Användning av ***** BY
- 10. Välj lämplig basmotor
- 11. Använd EXISTS -klausulen när det behövs
- 12. Använd EXPLAIN i dina SELECT -frågor
- 13. Indexera och använd samma typ av kolumn för Joins
- 14. Använd INTE NULL om du kan
- 15. Tabeller med fast storlek (statisk) är snabbare
- 16. Vertikal uppdelning
- 17. Lagrar IP -adresser som UNSIGNED INT
- 18. Skapa vyer för att förenkla vanlig användning i tabeller
- 19. Använd inte ***** PÅ RAND ()
- 20. Optimera WHERE -satsen
MySQL -databasen har blivit den mest populära open source -relationsdatabasen i världen på grund av dess höga prestanda, konsekvens, höga tillförlitlighet och användarvänlighet. Men dessa fördelar som det erbjuder oss påverkas ofta av hur vi arbetar med det.
I denna handledning kommer du att lära dig en rad tips som kommer att vara mycket användbara och som gör att vi kan få ut det mesta av både ur programmerarens och databasadministratörens synvinkel.
Vilket verktyg kommer vi att använda?MySQL -kommandokonsol '] MySQL har ett program, med samma namn som databasen (mysql) som används för att hantera databasen med kommandoraden.
WindowsDet finns i en katalog som:
C: \ Program Files \ MySQL \ MySQL Server 5.6 \ bin
Katalogen kan variera, till exempel kan den vara placerad i roten på C: disken eller på någon annan plats där vi kan ha installerat MySQL. För att komma åt MySQL -konsolen i Windows måste vi vara placerade i den katalogen.
LinuxSe följande länk:
Få åtkomst till MySQL från Linux
MacDatorer med system Mac OS X de har kommandoradsterminalen inbyggd bland de tillgängliga programmen. För att komma åt används samma kommando som i Linux.
phpMyAdminDet är ett gratis mjukvaruverktyg skrivet i PHP, som används för att administrera MySQL via Internet. Om du har en lokal utvecklingsmiljö installerad, till exempel XAMPP eller WAMP, kommer det här verktyget redan att installeras. Om du har en värdplan med en administrativ panel erbjuder de flesta av dem detta verktyg som en MySQL -databasadministratör.
[color = rgb (169 169 169)] phpMyAdmin från XAMPP [/ color]
FÖRSTORA
[color = # a9a9a9] phpMyAdmin från CPanel [/ color]
Med dessa två verktyg till hands kan vi börja testa alla dessa goda metoder som vi visar nedan.
Dessa är De 20 bästa metoderna för MySQL:
1. Namnkonvention
Det finns kodningsstandarder för alla programmeringsspråk, men i MySQL -termer har vi inte hittat några universella kodningsmetoder som alla följer. Genom att granska flera open source -ramverk baserade på PHP filtrerar vi dock bort några allmänna tillämpningsregler som hjälper oss att skriva SQL -frågor snabbare, eliminera förvirring och konflikter, både i frågan och i det programmeringsspråk som vi använder.
Generella reglerTänk på följande regler för att undvika problem.
- Använd gemener eftersom det hjälper dig att skriva hastighet, det kommer att undvika fel vid små och stora känsliga funktioner etc.
- Använd inte blanksteg, använd istället understrykningen (_).
- Använd inte siffror i namnen, bara engelska alfabetiska tecken.
- Använd giltiga, begripliga namn.
- Namn bör vara självförklarande.
- Namn får inte innehålla mer än 64 tecken.
- Undvik att använda prefix.
Regler för databasnamnFölj alla allmänna regler ovan.
- Namnet kan vara både singular och plural, men databasen representerar en databas så den bör vara singular så mycket som möjligt.
- Undvik prefix där det är möjligt.
Regler för tabellnamnAnvänd små bokstäver för tabellnamn: MySQL finns vanligtvis på Linux -servrar, det är skiftlägeskänsligt så bästa praxis är att skriva tabellnamn.
- Namnen på tabellerna måste vara i singular: tabellen är en enda enhet som modellen, så det är konstigt att ha namnet på tabellen i flertal.
- Prefix i tabellnamnet: Vi har sett många gånger att tabeller har prefix med namnet på databasen eller namnet på projektet. Ibland är detta nödvändigt när vi i vårt projekt har många databaser för att övervinna begränsningen hos vissa värdleverantörer. Men om det inte är nödvändigt och vårt projekt är litet, undvik att använda prefix.
Fältens namnAnvänd alla ovanstående regler, det vill säga använd små bokstäver, använd inte tomma mellanslag, använd inte siffror och undvik prefix.
- Använd ett eller två korta ord där det är möjligt.
- Fältens namn måste kunna förstås, till exempel: pris, företagsnamn, etc.
- Primärkolumnnamn: Primärnyckeln kan ha id -namn eller tabellnamn _id. Det beror på valet.
- Undvik att använda reserverade ord i fälten: *****, datum, etc. I dessa fall är det att föredra att använda prefix som record_date, etc.
- Undvik att använda kolumnnamn med samma tabellnamn. Detta kan orsaka förvirring när du skriver dina frågor.
- Undvik namn i förkortade eller sammanfogade akronymer.
2. Använd alltid rätt datatyp
Använd datatyper baserat på datatypen. Användning av irrelevanta datatyper kan ta mer plats eller leda till fel.
ExempelAtt använda varchar (20) för att lagra datetime-värden istället för DATETIME kan orsaka fel vid datumrelaterade tidsberäkningar och är också möjligt vid ogiltig datalagring.
3. Använd CHAR (1) över VARCHAR (1)
Om du har lagrat en enda teckensträng, använd CHAR (1) istället för VARCHAR (1) eftersom VARCHAR (1) tar en extra byte för att lagra information. Med vilken man ska ta hänsyn till det när man hanterar dessa tecken.
4. CHAR för fasta data
Använd CHAR -data för att bara lagra data med fast längd
Exempel:
Att använda CHAR (1000) istället för VARCHAR (1000) tar mer utrymme om datalängden är mindre än 1000.
5. Undvik att använda regionala datumformat
När du använder datatyper:
- DATUM TID
- DATUM
Använd alltid formatet ÅÅÅÅ-MM-DD eller ISO-datumformatet som passar din SQL-motor. Andra regionala format som DD-MM-ÅÅÅ, DD-MM-ÅÅÅÅ sparas inte korrekt.
6. Optimera dina förfrågningar om cachen
mest av MySQL -servrar har cachesystemet aktiverat. Det är en av de mest effektiva metoderna för att förbättra prestanda, som kommer från databasmotorns hand. När samma begäran körs flera gånger hämtas resultatet från cachen, vilket är mycket snabbare.
Följande exempel är i PHP:
// Cache fungerar INTE $ r = mysql_query ("VÄLJ namn FRÅN användare VAR post>> CURDATE ()");
// Cache FUNGERAR $ idag = datum ("Y-m-d"); $ r = mysql_query ("VÄLJ namn FRÅN användare VAR post>>" $ idag "");Anledningen till att det inte fungerar i det första fallet är på grund av användningen av CURDATE (). Den kan tillämpas på alla icke-deterministiska funktioner, till exempel NU () och RAND (). Eftersom resultatet som funktionen returnerar kan förändras, beslutar MySQL att inaktivera cacheminnet på den frågan.
7. Undvik att använda "SELECT *" i dina frågor
Som en tumregel, ju mer data som läses från tabellerna, desto långsammare blir en fråga. Med tanke på att vissa produktionstabeller kan innehålla dussintals kolumner, varav några består av stora datatyper, vore det oklokt att välja dem alla.
Det är en bra vana ange nödvändiga kolumner i din SELECT -sats.
8. Använd LIMIT 1 När du bara vill ha en enda rad
Ibland när du frågar efter dina tabeller och du vet att du bara behöver en enda rad. I dessa fall måste du begära ett enda resultat från databasen, annars kontrollerar det var och en av matchningarna i WHERE -klausulen.
I dessa fall kan tillägget LIMIT 1 till din fråga avsevärt förbättra hastigheten. På så sätt kommer databasen att sluta skanna resultat i det ögonblick den hittar en, istället för att gå igenom hela tabellen eller ett index.
// Jag har användare från Madrid? // vad man INTE ska göra: $ r = mysql_query ("VÄLJ * FRÅN användare VAR stad = 'Madrid'"); if (mysql_num_rows ($ r)> 0) {//…} // mycket bättre: $ r = mysql_query ("VÄLJ 1 FRÅN användare VAR stad = 'Madrid' LIMIT 1"); om (mysql_num_rows ($ r)> 0) {//…}[color = # a9a9a9]LIMIT rekommendation[/Färg]
9. Användning av ***** BY
Användningen av ***** FÖRBI det kan sakta ner svarstiden i miljöer med flera användare. Så vi rekommenderar att ***** BY -klausulen endast används när det behövs.
Missbruk inte dess användning.
10. Välj lämplig basmotor
Om du utvecklar ett program som läser data oftare än att skriva.
(till exempel: sökmotor), välj MyISAM -lagringsmotor.
Om du utvecklar ett program som skriver data oftare än att läsa
(till exempel bank i realtid), välj InnoDB-lagringsmotorn.
Att välja fel lagringsmotor påverkar prestandan för dina frågor.
11. Använd EXISTS -klausulen när det behövs
Om du vill söka efter data ska du inte använda:
Om (SELECT antal (*) från tabell WHERE col = 'något värde')> 0Använd istället EXISTS -klausulen:
Om EXISTS (SELECT * from Table WHERE col = 'some value')Vilket är snabbare i svarstid.
12. Använd EXPLAIN i dina SELECT -frågor
Genom att använda nyckelordet EXPLAIN får du många interna detaljer om vad MySQL gör för att utföra din fråga. Detta kan hjälpa dig att upptäcka flaskhalsar och andra problem med din fråga eller tabellstruktur.
Resultatet av en förklaring förfrågan visar de index som används, hur tabellen utforskas, hur den beställs, etc.
Välj en SELECT -fråga (helst en komplex fråga med kopplingar) och lägg till ordet EXPLAIN i början av allt. Resultaten återkommer i en enkel tabell. Anta till exempel att jag glömde att indexera en kolumn, det skulle visa oss följande skärm:
FÖRSTORA
Efter att ha lagt till indexet i statstabellen skulle det se ut så här:
FÖRSTORA
13. Indexera och använd samma typ av kolumn för Joins
Om din ansökan innehåller många JOIN -uttalanden måste du se till att de kolumner du går med i indexeras i båda tabellerna. Detta påverkar hur MySQL optimerar internt GÅ MED i verksamheten.
Kolumnerna som du går med i måste också vara av samma typ. Om du till exempel går med i en kolumn av typen DECIMAL med en kolumn av typen INT från en annan tabell, kommer MySQL inte att kunna använda minst ett av de två indexen. Även teckenkodningen måste vara av samma typ för kolumnerna Typ av sträng.
// letar efter företag i min stad $ r = mysql_query ("VÄLJ företagsnamn FRÅN användare VÄNSTER GÅ MED i företag på (users.city = companyias.city) WHERE users.id = $ user_id");Båda stadskolumnerna måste indexeras och båda ska vara av samma typ och teckenkodning eller så måste MySQL göra en fullständig genomsökning av tabellerna.
14. Använd INTE NULL om du kan
Om du inte har en specifik anledning att använda NULL -värdet bör du alltid ställa in dina kolumner till NOT NULL.
Fråga dig först om det skulle vara någon skillnad mellan att ha en tom sträng och ett NULL -värde (eller för INT -fält: 0 kontra NULL). Om det inte finns något problem mellan de två värdena behöver du inte ett NULL -fält. NULL -kolumner kräver extra utrymme och kan lägga till komplexitet i dina jämförelseuttalanden. Undvik dem bara när du kan.
Vi förstår i alla fall att det i vissa mycket specifika fall finns en anledning att använda NULL -kolumner, vilket inte alltid är dåligt.
15. Tabeller med fast storlek (statisk) är snabbare
När varje kolumn i en tabell är fastlängd anses hela tabellen vara "statisk" eller "fastlängd".
Några exempel på kolumntyper som INTE är fasta är:
- VARCHAR
- TEXT
- KLICK
Om du bara inkluderar en av dessa kolumntyper kommer tabellen inte längre att ha en fast storlek och måste behandlas annorlunda av MySQL -motor.
Tabeller med fast storlek kan öka produktiviteten eftersom det är snabbare för MySQL-motorn att söka igenom dina poster. När du vill läsa en specifik rad i tabellen kan du snabbt beräkna dess position. Om radstorleken inte är fast måste du först fråga indexet för den primära nyckeln varje gång du måste söka.
De är också lättare att söka och att bygga om efter en olycka. Men å andra sidan kan de också ta mer plats.
16. Vertikal uppdelning
Vertikal partitionering är att separera din bordstruktur vertikalt av optimeringsskäl.
Exempel 1:
Du kommer säkert att ha en användartabell som innehåller en postadress, som inte används särskilt ofta. Här kan du dela bordet och lagra adresserna i en separat tabell. På detta sätt skulle ditt huvudanvändarbord ha en snävare storlek. Som ni vet, ju mindre desto snabbare blir borden.
Exempel 2:
Du har ett "last_access" -fält i tabellen. Det uppdateras varje gång en användare öppnar din sida. Men varje åtkomst gör att frågecacheminnet för den tabellen frigörs. Vad du kan göra är att placera detta fält i en annan tabell så att ändringarna i din användartabell hålls på ett minimum.
Men du måste också se till att du inte ständigt behöver gå med i de två tabellerna efter partitionering, annars kommer du att drabbas av prestandaförlust, precis tvärtom från vad vi letade efter.
17. Lagrar IP -adresser som UNSIGNED INT
Många programmerare skulle skapa en VARCHAR -fält (15) utan att inse att de kan lagra IP -adresser som heltal. När du använder en INT använder du bara 4 byte i minnet, och den har också en fast storlek i tabellen.
Men du måste se till att kolumnen är UNSIGNED INT (osignerat heltal) eftersom IP-adresser använder hela det 32-bitars osignerade intervallet.
I dina frågor kan du använda INET_ATON () -funktion för att konvertera en IP -adress till ett heltal och INET_NTOA () för att göra motsatsen. Det finns också liknande funktioner i PHP som kallas ip2long () Y long2ip ().
18. Skapa vyer för att förenkla vanlig användning i tabeller
Vyer hjälper till att förenkla både komplexa scheman och säkerhetsimplementering. Ett sätt att de bidrar till säkerhetsdelen är att det låter dig dölja namnen på fälten för utvecklarna.
Det kan också användas för att filtrera icke-indexerade kolumner och lämnar bara de fält som visas snabbare i sökningen.
19. Använd inte ***** PÅ RAND ()
Detta är ett av de knep som låter bra vid första anblicken och där många nybörjare programmerar tenderar att falla. Du kanske inte har insett den otroliga flaskhalsen som kan orsakas av att använda denna teknik i dina förfrågningar.
Om du verkligen behöver slumpmässiga tabeller för ditt resultat finns det mycket bättre sätt att göra det. Det är klart att de kommer att ta upp mer kod, men du kommer att förhindra en möjlig flaskhals som ökar exponentiellt när ditt innehåll växer.
Problemet är att MySQL måste köras RAND () (som kräver processorkraft) för var och en av raderna innan du sorterar dem och returnerar en enda rad.
// sättet att INTE göra det: $ r = mysql_query ("VÄLJ användarnamn FRÅN användaren ***** BY RAND () LIMIT 1"); // mycket bättre: $ r = mysql_query ("SELECT count (*) FROM user"); $ d = mysql_fetch_row ($ r); $ rand = mt_rand (0, $ d [0] - 1); $ r = mysql_query ("VÄLJ användarnamn FRÅN användarnamn LIMIT $ rand, 1");Så du väljer ett slumpmässigt tal som är mindre än antalet resultat och använder det som förskjutningen i LIMIT -satsen.
20. Optimera WHERE -satsen
Det här är några tips för att optimera WHERE -klausulen:
- Ta bort onödiga parenteser. Till exempel:
Från till5 OCH b = c OCH a = 5
- RÄKNA (*) det är optimerat för att returnera en SELECT mycket snabbare, så länge det är till ett bord och utan att använda WHERE. Till exempel:
VÄLJ RÄKNE (*) FRÅN tabell.
- De Alternativet SQL_SMALL_RESULT, kan användas med GRUPP AV eller DISTINKT för att indikera att resultatuppsättningen är liten. I det här fallet använder MySQL mycket snabba tillfälliga tabeller för att lagra det resulterande bordet istället för att använda sortering.
MySQL -självstudier