Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 9362|Antwoord: 0

[Bron] MySQL database iron rule

[Link kopiëren]
Geplaatst op 10-10-2019 14:00:44 | | |
Een goede databasespecificatie helpt de complexiteit van software-implementatie te verminderen en de communicatiekosten te verlagen.

1. De ijzeren wet van het bouwen van een pakhuis

-
IJzerwet
Niveau
opmerking
Tekenset
Gebruik UTF-8. Als de emoji is opgeslagen, gebruik dan utf8mb4 voor opslag.
gedwongen

Sorteerregels
Gebruik utf8_general_ci
gedwongen

2. De ijzeren wet van tafelconstructie

-
IJzerwet
Niveau
opmerking
exegese
Zorg dat je veldannotaties hebt.
gedwongen

coderen
Gebruik UTF-8. Als de emoji is opgeslagen, gebruik dan utf8mb4 voor opslag.
gedwongen

of het veld conceptueel is
Het moet met is_xx benoemd worden, en het datatype is unsigned tinyint(1 ja, 0 no), bijvoorbeeld is_deleted(1 delete, 0 not deleted).
gedwongen
Elk veld moet onondertekend zijn als het niet negatief is
Tabelnaam, veldnaam
Alleen kleine letters, onderstrepen of cijfers mogen worden gebruikt; Het is verboden om te beginnen met een onderstreep of getal; Alleen nummers zijn verboden tussen twee onderscores; Schakel gereserveerde woorden uit; Het gebruik van meervoudige zelfstandige naamwoorden is verboden in tabelnamen.
gedwongen

De naamgeving van de databasenaam en tabelnaam
De databasenaam moet consistent zijn met de applicatienaam, en de tabelnaam moet worden benoemd met Business Name_Role van de tabel.
gedwongen

Indexnaamgeving
De primaire sleutelindex gebruikt pk_ veldnaam; Unieke index met uk_ veldnaam; Normale indexen gebruiken idx_ veldnamen.
gedwongen
pk_ is de primaire toonsoort; uk_ is unieke sleutel; idx_ is index
Decimale letters
Het datatype is decimaal, en het gebruik van float en double is verboden, float en double hebben precisieverlies, en als het opgeslagen databereik het decimale bereik overschrijdt, wordt aanbevolen de data op te splitsen in gehele getallen en decimalen en deze apart op te slaan.
gedwongen

Varchar-type
Varchar is een variabele lange string, er wordt geen opslagruimte vooraf toegewezen, de lengte mag niet meer dan 5000 tekens bedragen, als de lengte groter is dan 5000, pas dan tekst toe (maak een aparte tabel aan, gebruik de primaire sleutel om te corresponderen, om de indexeringsefficiëntie van andere velden niet te beïnvloeden).
gedwongen

Er moeten drie velden in de tabelnaam staan
ID (datatype is unsigned bigint, enkele tabel increment, stapgrootte is 1), gmt_create, gmt_modified (actieve aanmaaktijd, passieve updatetijd, datatype is datetime).
gedwongen

Veldredundantie
Velden bieden passende redundantie, maar dataconsistentie moet worden overwogen, en redundante velden moeten 1) zelden worden gewijzigd; 2) Geen varchar superlang veld, laat staan een tekstveld.
Aanbevelen

Verdeel de database en tabellen
Partitioneren wordt alleen aanbevolen wanneer het aantal rijen in een enkele tabel meer dan 5 miljoen rijen bedraagt of de capaciteit van een enkele tabel meer dan 2 GB bedraagt.
Aanbevelen


Het instellen van de juiste lengte van de tekenopslag bespaart niet alleen ruimte in databasetabellen en indexopslag, maar verbetert vooral de ophaalsnelheid.

3. Stel een indexijzerwet vast

-
IJzerwet
Niveau
opmerking
Unieke index
Velden met unieke kenmerken in het bedrijf, zelfs als het een combinatie van vakgebieden zijn, moeten uniek geïndexeerd zijn. Hoewel de unieke index de invoegsnelheid beïnvloedt, is dit verlies verwaarloosbaar, maar het verbetert de querysnelheid aanzienlijk. Bovendien, zelfs als de applicatielaag zeer volledige controlecontrole heeft, zolang er geen unieke index is, zullen volgens de wet van Murphy onvermijdelijk onbenullige data worden gegenereerd.
gedwongen

Word lid
Meer dan drie tabellen verbieden joining, velden die join vereisen, en de datatypes moeten consistent zijn; Wanneer meerdere tabellen aan queries zijn gekoppeld, zorg er dan voor dat de bijbehorende velden een index moeten hebben. Zelfs als je een dubbele table join hebt, let dan op tabelindexering en SQL-prestaties.
gedwongen

Varcharfield
De indexlengte moet worden gespecificeerd, en het is niet nodig om alle velden te indexeren, alleen de indexlengte te bepalen volgens het daadwerkelijke tekstonderscheid. Indexlengte en onderscheid zijn een paar tegenstrijdigheden; over het algemeen hebben indexen met een lengte van 20 een onderscheidingsgraad van meer dan 90%, wat kan worden bepaald door de onderscheidende graad van count(distinct left(kolomnaam, indexlengte))/count(*).
gedwongen

Vervagen is verboden bij paginazoekopdrachten
Pagina-zoeken verbiedt vervaging of volledige vervaging, indien nodig, ga dan naar de zoekmachine om het op te lossen. Reden voor verbod: Het indexbestand heeft de meest linkse prefix-overeenkomsteigenschap van de B-boom, en als de waarde links niet bepaald is, kan deze index niet worden gebruikt.
gedwongen

Volgorde op
Als er een volgorde per scenario is, let dan op de ordelijkheid van de index. Het laatste veld van order by maakt deel uit van de gecombineerde index en wordt aan het einde van de indexcombinatievolgorde geplaatst om file_sort te voorkomen en de queryprestaties te beïnvloeden. Voorbeeld: waar a=? en b=? volgorde per C; De index moet als a_b_c worden opgebouwd; Tegenvoorbeeld: Als er een bereikzoekopdracht in de index is, kan de ordeloosheid van de index niet worden gebruikt, bijvoorbeeld waar a>10 door b wordt geordend; Index a_b kan niet worden gesorteerd.
Aanbevelen

4. Schrijf SQL iron rules

-
IJzerwet
Niveau
opmerking
Telling(*)
Gebruik geen count(kolomnaam) of count(constant) in plaats van count(*), wat de syntaxis is voor het standaardaantal rijen gedefinieerd door SQL92, onafhankelijk van de database, en onafhankelijk van NULL en niet-NULL. count(*) telt rijen met een NULL-waarde, terwijl count(kolomnaam) geen rijen telt met deze kolom NULL.
gedwongen

Graaf (onderscheidend col)
Telt het aantal unieke rijen in de kolom behalve NULL. Let op dat aantal (verschillende kolom 1, kol2), als één van de kolommen allemaal NULL is, deze 0 teruggeeft, zelfs als de andere kolom een andere waarde heeft.
gedwongen

sum(col)
Wanneer de waarden van een kolom allemaal NULL zijn, geeft count(col) 0 terug, maar sum(col) geeft NULL terug, dus je moet alert zijn op NPE-problemen bij het gebruik van sum(). NPE-problemen kunnen op de volgende manieren worden vermeden: selecteer als(isnull(som(g)), 0, som(g)) uit de tabel;
gedwongen

isnull
Gebruik isnull() om te bepalen of het een NULL-waarde is. NULL is NULL vergeleken met elke waarde.
gedwongen

Pagineringsquerylogica
Als de telling 0 is, moet deze direct worden teruggegeven om het uitvoeren van de volgende pagineringsinstructie te voorkomen.
gedwongen

Buitenste sleutels en cascades
Het gebruik van vreemde sleutels en cascadering is verboden, en alle vreemde sleutelconcepten moeten op de applicatielaag worden opgelost. Reden: vreemde sleutels en cascades zijn niet geschikt voor gedistribueerde, hoog-gelijktijdige clusters, cascaderende updates zijn sterke blokkade, er is risico op database-update storms en vreemde sleutels beïnvloeden de invoegsnelheid van de database.
gedwongen

Opgeslagen procedures
Opgeslagen procedures zijn verboden, opgeslagen procedures zijn moeilijk te debuggen en op te schalen, en zijn niet draagbaar.
gedwongen

Gegevenscorrectie
Bij het corrigeren van data (vooral het verwijderen of wijzigen van records), selecteer eerst om per ongeluk verwijdering te voorkomen, en voer de update-instructie pas uit nadat je hebt bevestigd dat deze correct is.
gedwongen

in
Als het niet te vermijden is, moet het aantal set-elementen na in binnen 1000 worden gecontroleerd.
Aanbevelen

Afkaptabel
Het is verboden om de tabel, trupate, te gebruiken, die sneller is dan delete en minder systeem- en logbronnen gebruikt, maar truncate is transactievrij en triggert geen triggers, wat ongelukken kan veroorzaken, dus gebruik deze instructie niet in ontwikkelcode.
referentie


5. ORM kaarten ijzerwetten in kaart

-
IJzerwet
Niveau
opmerking
Tabelquery
De lijst van velden die * niet mogen gebruiken voor zoekopdrachten moet duidelijk zijn welke velden vereist zijn.
gedwongen

POJO
Het Booleaanse attribuut van de POJO-klasse kan niet worden toegevoegd aan is, terwijl het databaseveld aan is moet worden toegevoegd, wat een mapping vereist tussen velden en attributen in de resultMap.
gedwongen

Retourparameters
Het is verboden resultClass als returnparameter te gebruiken, zelfs als alle klasse-attribuutnamen één voor één overeenkomen met databasevelden, moeten ze worden gedefinieerd; Elke tabel moet op zijn beurt een attribuut hebben dat eraan overeenkomt. Reden: Configureer de mappingrelatie zodat het veld koppelt aan de DO-klasse voor eenvoudig onderhoud.
gedwongen

Retourparameters
Het is verboden om HashMap en HashTable direct te gebruiken als output van de zoekresultatenset. Reden: Het type attribuutwaarde is oncontroleerbaar.
gedwongen

sql.xml Parameters configureren
sql.xml Gebruik #{}, #param# voor configuratieparameters, en gebruik ${} niet, omdat ${} gevoelig is voor SQL-injectie.
gedwongen

queryForList
Het gebruik van queryForList (String statementName, int start, int size) dat bij Mybatis hoort, is verboden. Reason: Het wordt geïmplementeerd door alle records van de SQL-instructie die overeenkomt met statementName in de database op te halen, en vervolgens de subList te gebruiken om een deelset van startgrootte te krijgen.
gedwongen

Updatetijd
Bij het bijwerken van een databasetabelrecord moet je tegelijkertijd de wijzigingstijd van het record bijwerken.
gedwongen

Werk databasetabelrecords bij
Schrijf geen grote en volledige data-update interface (doorgegeven als een POJO-klasse). Bij het uitvoeren van SQL moet je ongewijzigde velden niet bijwerken vanwege foutgevoelige, inefficiënte en verhoogde binlogopslag.
Aanbevelen

@Transactional
@Transactional Maak geen misbruik van transacties. Transacties beïnvloeden de QPS van de database. Daarnaast moet je, waar je transacties gebruikt, rekening houden met verschillende aspecten van rollback-schema's, waaronder cache-rollback, zoekmachine-rollback, berichtcompensatie, statistische correctie, enzovoort.
referentie

Mybatis dynamische SQL-tags
< compareValue in isEqual> is een constante vergeleken met de attribuutwaarde, meestal een getal, wat aangeeft dat de bijbehorende SQL-instructie wordt uitgevoerd wanneer gelijk; < isNotEmpty> geeft aan dat het wordt uitgevoerd wanneer het niet leeg en niet nul is; < isNotNull> geeft aan dat het wordt uitgevoerd wanneer het niet null is.
referentie








Vorig:SEO-operatiekaart is de eerste op het hele netwerk, een verzameling ultracomplete internet high-definition operatiekaarten
Volgend:[Aardwetenschappen] DK Kinderencyclopedie Een hoogwaardige encyclopedie uit het Verenigd Koninkrijk...
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com