Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 9362|Risposta: 0

[Fonte] Regola ferrata dei database MySQL

[Copiato link]
Pubblicato su 10/10/2019 14:00:44 | | |
Una buona specifica del database aiuta a ridurre la complessità dell'implementazione del software e a ridurre i costi di comunicazione.

1. La legge di ferro della costruzione di un magazzino

-
Legge di ferro
Livello
osservazione
Set di caratteri
Usa UTF-8. Se l'emoji è memorizzata, usa utf8mb4 per lo storage.
forzato

Regole di smistamento
Usa utf8_general_ci
forzato

2. La legge ferrea della costruzione dei tavoli

-
Legge di ferro
Livello
osservazione
esegesi
Assicurati di avere annotazioni sul campo.
forzato

codificare
Usa UTF-8. Se l'emoji è memorizzata, usa utf8mb4 per lo storage.
forzato

se il campo è concettuale
Deve essere chiamato con is_xx, e il tipo di dato è unsigned tinyint (1 sì, 0 no), ad esempio is_deleted(1 elimina, 0 non eliminato).
forzato
Qualsiasi campo deve essere senza segno se non è negativo
Nome della tabella, nome del campo
Si possono usare solo lettere minuscole, sottolinee o numeri; È vietato iniziare con una sottolinea o un numero; Solo i numeri sono vietati tra due sottolinee; Disabilita le parole riservate; L'uso dei sostantivi plurali è vietato nei nomi delle tabelle.
forzato

La denominazione del nome del database e del nome della tabella
Il nome del database dovrebbe essere coerente con il nome dell'applicazione, e il nome della tabella dovrebbe essere indicato con Name_Role Business della tabella.
forzato

Denominazione degli indici
L'indice chiave primaria utilizza pk_ nome del campo; Indice unico con uk_ nome del campo; Gli indici normali utilizzano idx_ nomi di campi.
forzato
pk_ è la chiave primaria; uk_ è una tonalità unica; idx_ è indice
Tipo decimale
Il tipo di dato è decimale, e l'uso di float e double è vietato; float e double hanno perdita di precisione, e se l'intervallo di dati memorizzati supera quello decimale, si raccomanda di dividere i dati in interi e decimali e memorizzarli separatamente.
forzato

Tipo Varchar
varchar è una stringa variabile lunga, non viene allocato spazio di archiviazione in anticipo, la lunghezza non dovrebbe superare i 5000 caratteri; se la lunghezza è superiore a 5000, applica il testo (crea una tabella separata, usa la chiave primaria per corrispondere, per evitare di influenzare l'efficienza di indicizzazione di altri campi).
forzato

Devono esserci tre campi nel nome della tabella
ID (il tipo di dato è bigint senza segno, incremento di tabella singola, dimensione del passo è 1), gmt_create, gmt_modified (tempo di creazione attiva, tempo di aggiornamento passivo, tipo di dato è datatime).
forzato

Ridondanza del campo
I campi permettono una ridondanza appropriata, ma bisogna considerare la coerenza dei dati, e i campi ridondanti dovrebbero avere 1) modifiche poco frequenti; 2) Non un campo varchar super lungo, figuriamoci un campo di testo.
Consigliato

Dividere il database e le tabelle
La partizionazione è raccomandata solo quando il numero di righe in una singola tabella supera i 5 milioni di righe o la capacità di una singola tabella supera i 2 GB.
Consigliato


Impostare la lunghezza di archiviazione dei caratteri appropriata non solo fa risparmiare spazio nelle tabelle del database e nell'indice, ma, cosa più importante, migliora la velocità di recupero.

3. Stabilire una legge di ferro indice

-
Legge di ferro
Livello
osservazione
Indice unico
I campi con caratteristiche uniche nell'azienda, anche se sono una combinazione di campi, devono essere indicizzati in modo univoco. Sebbene l'indice unico influenzi la velocità dell'inserimento, questa perdita è trascurabile, ma migliora significativamente la velocità di interrogazione. Inoltre, anche se il livello applicativo ha un controllo di controllo molto completo, finché non esiste un indice univoco, secondo la Legge di Murphy, inevitabilmente verranno generati dati compromettiti.
forzato

Unisciti
Più di tre tabelle vietano il joining, campi che richiedono join e i tipi di dati devono essere coerenti; Quando più tabelle sono associate alle query, assicurati che i campi associati debbano avere un indice. Anche se hai una doppia unione di tabelle, presta attenzione all'indicizzazione delle tabelle e alle prestazioni SQL.
forzato

Varcharfield
La lunghezza dell'indice deve essere specificata, e non è necessario indicizzare tutti i campi, basta determinare la lunghezza dell'indice in base alla distinzione effettiva del testo. La lunghezza dell'indice e la distinzione sono una coppia di contraddizioni; generalmente per i dati di tipo di stringa, gli indici con una lunghezza di 20 avranno un grado di distinzione superiore al 90%, che può essere determinato dal grado di distinzione di count(distinct left(nome colonna, lunghezza dell'indice)))/count(*).
forzato

La sfocatura è vietata nella ricerca delle pagine
La ricerca sulla pagina vieta la sfocatura completa o sfocatura; se necessario, si prega di rivolgersi al motore di ricerca per risolverla. Motivo di divieto: Il file indice ha la proprietà di corrispondenza del prefisso più a sinistra dell'albero B, e se il valore a sinistra non viene determinato, allora questo indice non può essere usato.
forzato

Ordine per
Se esiste un ordine per scenario, presta attenzione all'ordine dell'indice. L'ultimo campo di ordine per fa parte dell'indice combinato ed è posizionato alla fine dell'ordine di combinazione dell'indice per evitare file_sort e influenzare le prestazioni delle query. Esempio: dove a=? e b=? ordine da c; L'indice dovrebbe essere costruito come a_b_c; Controesempio: Se c'è una ricerca di intervallo nell'indice, allora l'ordine dell'indice non può essere utilizzato, ad esempio dove a>10 ordina per b; L'indice a_b non può essere ordinato.
Consigliato

4. Scrivere regole concrete SQL

-
Legge di ferro
Livello
osservazione
conteggio(*)
Non usare count(nome colonna) o count(costante) al posto di count(*), che è la sintassi per il conteggio standard delle righe definito da SQL92, indipendente dal database, e indipendente da NULL e non-NULL. count(*) conta le righe con valore NULL, mentre count(nome colonna) non conta le righe con questa colonna NULL.
forzato

conte (colle distinto)
Conta il numero di righe uniche nella colonna tranne NULL. Si noti che count(distinto col1, col2), se una delle colonne è tutta NULL, allora restituisce 0 anche se l'altra colonna ha un valore diverso.
forzato

Sum(col)
Quando i valori di una colonna sono tutti NULL, count(col) restituisce 0, ma sum(col) restituisce NULL, quindi devi essere consapevole di problemi NPE quando usi sum(). I problemi NPE possono essere evitati nei seguenti modi: selezionare if(isnull(sum(g)), 0, sum(g)) dalla tabella;
forzato

isnull
Usa isnull() per determinare se è un valore NULL. NULL è NULL rispetto a qualsiasi valore.
forzato

Logica di query per paginazione
Se il conteggio è 0, dovrebbe essere restituito direttamente per evitare di eseguire la successiva istruzione di paginazione.
forzato

Tonalità esterne e cascate
L'uso di chiavi esterne e cascata è vietato, e tutti i concetti di chiave esterna devono essere risolti a livello applicativo. Motivo: Le chiavi esterne e le cascate non sono adatte a cluster distribuiti ad alta concorrenza, gli aggiornamenti a cascata sono forti blocchi, c'è il rischio di tempeste di aggiornamento del database e le chiavi esterne influenzano la velocità di inserimento del database.
forzato

Procedure memorizzate
Le stored procedure sono vietate, e le stored procedure sono difficili da debug e scalabili, e non portatili.
forzato

Correzione dei dati
Quando si correggono dati (soprattutto nella cancellazione o modifica dei record), seleziona prima per evitare cancellazioni accidentali ed esegui l'istruzione update solo dopo aver confermato che sia corretta.
forzato

in
Se non può essere evitato, il numero di elementi di set dopo l'inizio dovrebbe essere controllato entro 1000.
Consigliato

Tabella tronca
È vietato usare la tabella tronca, che è più veloce della cancellazione e utilizza meno risorse di sistema e log, ma il tronco è privo di transazioni e non attiva trigger, il che potrebbe causare incidenti, quindi non utilizzare questa istruzione nel codice di sviluppo.
riferimento


5. ORM mappa le leggi del ferro

-
Legge di ferro
Livello
osservazione
Query della tabella
L'elenco dei campi che sono vietati dall'uso di * per le query deve essere chiaro su quali campi sono richiesti.
forzato

POJO
L'attributo booleano della classe POJO non può essere aggiunto a is, mentre il campo del database deve essere aggiunto a is, richiedendo la mappatura tra campi e attributi nel resultMap.
forzato

Parametri di ritorno
È vietato usare resultClass come parametro di ritorno, anche se tutti i nomi degli attributi delle classi corrispondono uno alla volta ai campi del database, devono essere definiti; A sua volta, ogni tabella deve avere un attributo corrispondente. Motivo: Configura la relazione di mappatura per accoppiare il campo con la classe DO per facilitare la manutenzione.
forzato

Parametri di ritorno
È vietato usare direttamente HashMap e HashTable come output del set di risultati della query. Motivo: Il tipo di valore dell'attributo è incontrollabile.
forzato

sql.xml Configurare i parametri
sql.xml Usa #{}, #param# per i parametri di configurazione e non usare ${}, poiché ${} è soggetto a SQL injection.
forzato

queryForList
L'uso di queryForList (String statementName, int start, int size) che viene fornito con Mybatis è vietato. Motivo: Viene implementato recuperando tutti i record dell'istruzione SQL corrispondente all'istruzione Nome della dichiarazione nel database, e poi usando il sottoList per ottenere un sottoinsieme di inizio, dimensione.
forzato

Tempo di aggiornamento
Quando si aggiorna un record di tabella di database, è necessario aggiornare contemporaneamente il tempo di modifica del record.
forzato

Aggiorna i record della tabella del database
Non scrivere un'interfaccia di aggiornamento dati grande e completa (passata come classe POJO). Quando esegui SQL, non aggiornare i campi inalterati a causa di uno spazio di archiviazione binlog soggetto a errori, inefficiente e aumentato.
Consigliato

@Transactional
@Transactional Non abusare delle transazioni. Le transazioni influenzano il QPS del database. Inoltre, quando usi le transazioni, devi considerare vari aspetti degli schemi di rollback, tra cui il rollback della cache, il rollback dei motori di ricerca, la compensazione dei messaggi, la correzione statistica, ecc.
riferimento

Tag SQL dinamici Mybatis
< compareValue in isEqual> è una costante rispetto al valore dell'attributo, solitamente un numero, che indica che l'istruzione SQL corrispondente viene eseguita quando uguale; < isNotEmpty> indica che viene eseguito quando non è vuoto e non è nullo; < isNotNull> indica che viene eseguito quando non è nullo.
riferimento








Precedente:La mappa operativa SEO è la prima di tutta la rete, una raccolta di mappe operative ad alta definizione ultra-complete di Internet
Prossimo:[Scienze della Terra] DK Children's Encyclopedia Un'enciclopedia di alta qualità dal Regno Unito...
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com