Maison >base de données >tutoriel mysql >Base de données Catch-30
Base de données Catch-30
Spécifications de base
(1) Le moteur de stockage InnoDB doit être utilisé
Interprétation : prend en charge les transactions, les verrous au niveau des lignes, de meilleures performances de concurrence, l'optimisation des pages du processeur et du cache mémoire, ce qui entraîne une utilisation plus élevée des ressources
(2) Le jeu de caractères UTF8 doit être utilisé
Interprétation : Code universel, pas besoin de transcoder, pas de risque de caractères tronqués, gain de place
(3) Des commentaires chinois doivent être ajoutés aux tableaux de données et aux champs de données
Interprétation : Qui dans N années saura à quoi servent les champs r1, r2, r3
(4) Il est interdit d'utiliser des procédures stockées, des vues, des déclencheurs et des événements
Interprétation : concurrence élevée Pour les activités Internet de données, l'idée de conception architecturale est"libérer le processeur de la base de données et transférer les calculs vers la couche de service". La quantité de concurrence est importante, ces fonctions sont très importantes. Il est possible de faire glisser la base de données jusqu'à la mort et de placer la logique métier dans la couche de service pour une meilleure évolutivité, et peut facilement atteindre. Les bases de données sont bonnes en matière de stockage et d'indexation, les calculs du processeur doivent donc être augmentés
(5) Il est interdit de stocker des fichiers ou des photos volumineux
Interprétation : Pourquoi laisser la base de données faire des choses qu'elle n'est pas bon pour ? Les fichiers et photos volumineux sont stockés dans le système de fichiers, et il serait bien de stocker les URI dans la base de données
2. Spécifications de nommage
(6) Uniquement domaine intranet les noms sont autorisés, pas IP Connexion à la base de données
(7) Environnement en ligne, environnement de développement et environnement de test Le nom de domaine intranet de la base de données suit la convention de dénomination
● Nom de l'entreprise : xxx
● Environnement en ligne : dj .xxx.db
● Environnement de développement : dj.xxx.rdb
● Environnement de test : dj.xxx.tdb
● Ajoutez le logo -s après le nom de la bibliothèque esclave, ajoutez la marque -ss après le nom de la base de données de sauvegarde
● Base de données esclave en ligne : dj.xxx-s.db
● Base de données de sauvegarde en ligne : dj.xxx-sss.db
(8) Nom de la bibliothèque, nom de la table, nom du champ : minuscule, style souligné, pas plus de 32 caractères, le nom doit être clairement compris, non le mélange du pinyin et de l'anglais est autorisé
(9) Nom de la table t_xxx, nom d'index non unique idx_xxx, nom d'index unique uniq_xxx
3. Spécifications de conception de la table
(10) Le nombre de tables à instance unique doit être inférieur à 500
( 11) Le nombre de colonnes dans une seule table doit être inférieur à 30
(12) Le la table doit avoir une clé primaire, telle qu'une clé primaire à augmentation automatique
Interprétation :
* a) La clé primaire est incrémentée et la ligne de données est écrite L'insertion peut améliorer les performances d'insertion, éviter Le fractionnement des `pages', réduit la fragmentation de la table et améliore l'utilisation de l'espace et de la mémoire
* b) Sélectionnez un type de données plus court pour la clé primaire. L'index ordinaire du moteur Innodb enregistrera la valeur des types de données plus courts. peut réduire efficacement l'espace disque de l'index et améliorer l'efficacité du cache de l'index
* c) La suppression des tables sans clés primaires, dans l'architecture maître-esclave du mode ligne, entraînera la suppression de la base de données de secours choked
(13) L'utilisation de clés étrangères est interdite S'il existe des contraintes d'intégrité de clé étrangère, un contrôle des applications est requis
Interprétation : Les scénarios commerciaux à forte simultanéité Big Data utilisent des bases de données avec une priorité de performances
4. Spécification de conception des champs.
(14) Le champ doit être défini comme NON NULL et fournir une valeur par défaut
Interprétation :
* a) Les colonnes nulles permettent les statistiques d'index/index / Les comparaisons de valeurs sont plus complexes, et il est plus difficile d'optimiser pour MySQL
* b) null Ce type de MySQL nécessite un traitement spécial en interne, ce qui augmente la complexité du traitement des enregistrements de la base de données dans les mêmes conditions ; plus dans le tableau Lorsqu'il y a plusieurs champs nuls, les performances de traitement de la base de données seront considérablement réduites
* c) Les valeurs nulles nécessitent plus d'espace de stockage, et des colonnes nulles dans chaque ligne du tableau ou l'index nécessite un espace supplémentaire. Marquage
* d) Lorsque vous traitez null, vous ne pouvez utiliser que `is null` ou `is not null`, mais pas `=, in, <, <>, !=, pas dans ces symboles d'opération. Par exemple : où nom!='shenjian', s'il existe un enregistrement dont le nom est une valeur nulle, le résultat de la requête n'inclura pas l'enregistrement dont le nom est une valeur nulle
(15) Il est interdit de utilisez les types TEXT et BLOB
Interprétation : cela gaspillera plus d'espace disque et mémoire, et un grand nombre de requêtes de grands champs inutiles élimineront les données chaudes, ce qui entraînera une forte diminution du taux d'accès à la mémoire et affectera les performances de la base de données
(16) L'utilisation de décimales est interdite. Devise du magasin
Interprétation : utilisez des nombres entiers, les décimales peuvent facilement conduire à une disparité d'argent
(17) Vous devez utiliser varchar(20) pour stocker des numéros de téléphone portable
Interprétation :
* a) Lorsqu'il s'agit d'indicatifs régionaux ou de pays, `+-()` peut apparaître
* b) Sera les numéros de téléphone portable effectuent-ils des opérations mathématiques ?
* c) varchar peut prendre en charge les requêtes floues, par exemple : `like "138%"`
(18) L'utilisation d'ENUM est interdite, TINYINT peut être utilisé à la place de
Interprétation :
* a) L'ajout d'une nouvelle valeur ENUM nécessite une opération DDL
* b) Le stockage interne réel d'ENUM est un entier. Pensez-vous que vous définissez une chaîne. ?
5. Spécifications de conception de l'index
(19) Il est recommandé que les index de table unique soient contrôlés dans les 5
(20) Le nombre de champs d'index unique est pas autorisé à dépasser 5
Interprétation : Lorsqu'il y a plus de 5 champs, il n'est plus efficace pour filtrer les données
(21) Il est interdit de créer des index sur des attributs fréquemment mis à jour et ont une faible différenciation
Interprétation :
* a) Les mises à jour modifieront l'arborescence B+, et l'indexation des champs fréquemment mis à jour réduira considérablement les performances de la base de données
* b) "Genre" n'est pas distinguable. Pour les grands attributs, cela n'a aucun sens de créer un index. Il ne peut pas filtrer efficacement les données. Les performances sont similaires à celles d'une analyse de table complète
(22) Lors de la construction d'un index combiné, vous devez mettre. champs hautement différenciés devant
Interprétation : Peut filtrer les données plus efficacement
6. Spécifications d'utilisation SQL
(23) Il est interdit d'utiliser SELECT *, obtenez uniquement les champs nécessaires et devez afficher les instructions. Attributs des colonnes
Interprétation :
* a) La lecture des colonnes inutiles augmentera la consommation CPU, IO et NET
* b) Les index de couverture ne peuvent pas être utilisés efficacement
* c) L'utilisation de `SELECT *` est sujette à des bugs de programme après l'ajout ou la suppression de champs
(24) Il est interdit d'utiliser INSERT INTO t_xxx VALUES (xxx), et les attributs de colonne insérés spécifiés doivent être affichés
Interprétation : un BUG du programme est susceptible de se produire après l'ajout ou la suppression de champs
(25) Il est interdit d'utiliser la conversion implicite d'attribut
Interprétation : `SELECT uid FROM t_user WHERE phone=13812345678` Oui Cela entraîne une analyse complète de la table, mais ne peut pas accéder à l'index du téléphone. Devinez pourquoi ? (Cette question en ligne est apparue plus d'une fois)
(26) Il est interdit d'utiliser des fonctions ou des expressions sur les attributs des conditions WHERE
Interprétation : `SELECT uid FROM t_user WHERE from_unixtime(day )> ;='2017-02-15'` provoquera une analyse complète de la table
La façon correcte de l'écrire est : `SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00 :00:00') `
(27) Les requêtes négatives et les requêtes floues commençant par % sont interdites
Interprétation :
* a) Conditions de requête négatives : `NON, !=, < ;>, !<, !>, NOT IN, NOT LIKE`, etc., entraîneront une analyse complète de la table
* b) Les requêtes floues commençant par `%` entraîneront une analyse complète des tables
(28) Interdire aux grandes tables d'utiliser des requêtes JOIN et interdire aux grandes tables d'utiliser des sous-requêtes
Interprétation : des tables temporaires seront générées, consommant plus de mémoire et de CPU, et affectant grandement performances de la base de données
(29) L'utilisation des conditions OR est interdite et doit être remplacée par une requête IN
Interprétation : La requête OR de l'ancienne version de Mysql ne peut pas atteindre l'index même si elle. peut atteindre l'index, pourquoi la base de données devrait-elle consommer plus de CPU pour aider à implémenter la requête ? Qu'en est-il de l'optimisation ?
(30) Les applications doivent capturer les exceptions SQL et les gérer en conséquence
Résumé : les entreprises Internet avec de grandes quantités de données et une concurrence élevée affecteront grandement les performances de la base de données et ne sont pas autorisées à être utilisé.
Apprentissage recommandé : Tutoriel MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!