


Résumer les opérations les plus élémentaires de l'optimisation MySQL
Idées d'optimisation
Les étapes détaillées d'optimisation de MySQL sont les suivantes :
- Vérifiez la structure de la table de données et améliorez la conception imparfaite
- Exécutez l'activité principale et collectez les requêtes de base de données SQL couramment utilisées
- Analysez la requête SQL et divisez-le de manière appropriée. Ajoutez des index et d'autres requêtes optimisées
- Tout en optimisant SQL, optimisez la logique du code
- Ajoutez un cache local et un cache Redis
Essayez de ne pas utiliser de valeurs NULL
Parce que lors de la création d'une table, si vous ne définissez pas de valeur par défaut pour la valeur créée, MySQL définira la valeur par défaut sur NULL
. Alors pourquoi n'est-il pas bon d'utiliser NULL
? NULL
。那么为啥用NULL
不好呢?
-
NULL
使得索引维护更加复杂,强烈建议对索引列设置NOT NULL
-
NOT IN
、!=
等负向条件查询在有NULL
值的情况下返回永远为空结果,查询容易出错 -
NULL
列需要一个额外字节作为判断是否为NULL
的标志位 - 使用
NULL
时和该列其他的值可能不是同种类型,导致问题。(在不同的语言中表现不一样) - MySQL难以优化对可为
NULL
的列的查询
所以对于那些以前偷懒的字段,手动设置一个默认值吧,空字符串呀,0呀补上。
虽然这种方法对于MySQL的性能来说没有提升多少,但是这是一个好习惯,而且以小见大,不要忽略这些细节。
添加索引
对于经常查询的字段,请加上索引,有索引和没有索引的查询速度相差十倍甚至更多。
- 一般来说,每张表都需要有一个主键
id
字段 - 常用于查询的字段应该设置索引
-
varchar
类型的字段,在建立索引的时候,最好指定长度 - 查询有多个条件时,优先使用具有索引的条件
- 像
LIKE
条件这样的模糊搜索对于字段索引是无效的,需要另外建立关键词索引来解决 - 请尽量不要在数据库层面约束表和表之间的关系,这些表之间的依赖应该在代码层面去解决
当表和表之间有约束时,虽然增删查的SQL语句变简单了,但是带来的负面效果是插入等操作数据库都会去检查约束(虽然可以手动设置忽略约束),这样相当于把一些业务逻辑写到了数据库层,不便于维护。
优化表字段结构
数据库中那些可以用整形表示的数据就不要使用字符串类型,到底是用varchar
还是char
要看字段的可能值。
这种优化往往在数据库中有大量数据以后是不可行的,最好在数据库设计之前就设计好。
- 对于那些可能值很有限的列,使用
tinyint
代替VARCHAR
,- 比如记录移动设备平台,只有两个值:android,ios,那么就可以使用0表示android,1表示ios,这种列一定要写好注释
- 为什么不用
ENUM
呢?ENUM
扩展困难,比如后来移动平台又增加了一个ipad
,那岂不是懵逼了,而tinyint
加个2就行,而且ENUM
在代码里面处理起来特别奇怪,是当成整形呢还是字符串,各个语言不一样。 - 这种方式,一定要在数据库注释或者代码里面写明各个值的含义
- 对于那些定长字符串,可以使用
char
,比如邮编,总是5位 - 对于那些长度未知的字符串,使用
varchar
- 不要滥用
bigint
,比如记录文章数目的表id
字段,用int
就行了,21亿篇文章上限够了 - 适当打破数据库范式添加冗余字段,避免查询时的表连接
查询的时候,肯定int
类型比varchar
NULL
rend la maintenance de l'index plus compliquée. Il est fortement recommandé de définir NOT NULL
pour les colonnes d'index
NOT IN
, . != et les autres requêtes conditionnelles négatives renverront toujours des résultats vides lorsqu'il y a une valeur <code>NULL
. La requête est sujette aux erreurs🎜🎜La colonne NULL
nécessite une valeur. octet supplémentaire pour déterminer si lors de l'utilisation de NULL
pour le bit d'indicateur 🎜🎜 de NULL
, il peut ne pas être du même type que les autres valeurs de la colonne, ce qui pose des problèmes . (Il se comporte différemment selon les langues) 🎜🎜MySQL a du mal à optimiser les requêtes pour les colonnes qui peuvent être NULL
🎜🎜🎜Donc, pour les champs qui étaient paresseux auparavant, définissez manuellement une valeur par défaut, la chaîne de caractères nulle , ajoutez 0. 🎜🎜Bien que cette méthode n'améliore pas beaucoup les performances de MySQL, c'est une bonne habitude, et les petites choses font de grandes choses, alors n'ignorez pas ces détails. 🎜🎜🎜🎜Ajouter un index🎜🎜Pour les champs fréquemment interrogés, veuillez ajouter des index. La vitesse de requête avec et sans index diffère de dix fois ou plus. 🎜🎜🎜De manière générale, chaque table doit avoir un champ de clé primaire id
🎜🎜Les champs couramment utilisés pour les requêtes doivent être indexés 🎜🎜Champs de type varchar
, lors de la création Lors de l'indexation , il est préférable de spécifier la longueur🎜🎜Lorsque la requête comporte plusieurs conditions, les conditions avec index sont préférées🎜🎜Les recherches floues telles que les conditions LIKE
ne sont pas valides pour les index de champ et des clés supplémentaires doivent être établies Index de mots à résoudre🎜🎜Veuillez essayer de ne pas contraindre la relation entre les tables au niveau de la base de données. Les dépendances entre ces tables doivent être résolues au niveau du code🎜🎜🎜Lorsqu'il y a un problème entre les tables Quand. contraignant, bien que l'instruction SQL d'ajout, de suppression et de requête devienne plus simple, l'effet négatif est que la base de données vérifiera les contraintes pour des opérations telles que l'insertion (bien que les contraintes puissent être définies manuellement pour les ignorer), ce qui équivaut à écrire quelques logique métier à la couche de base de données. Facile à maintenir. 🎜🎜🎜🎜Optimiser la structure des champs de la table🎜🎜N'utilisez pas de types de chaîne pour les données de la base de données qui peuvent être représentées par des entiers. L'utilisation de varchar
ou de char
dépend de. le champ. 🎜🎜Ce type d'optimisation n'est souvent pas réalisable lorsqu'il y a une grande quantité de données dans la base de données. Il est préférable de la concevoir avant la conception de la base de données. 🎜🎜🎜Pour les colonnes avec des valeurs possibles très limitées, utilisez tinyint
au lieu de VARCHAR
, 🎜🎜Par exemple, pour enregistrer la plate-forme d'appareil mobile, il n'y a que deux valeurs : Android , ios, alors Vous pouvez utiliser 0 pour représenter android et 1 pour représenter ios. Ce type de colonne doit être bien commenté🎜🎜Pourquoi ne pas utiliser ENUM
? Il est difficile de développer ENUM
. Par exemple, lorsque la plate-forme mobile a ensuite ajouté un ipad
, cela ne serait-il pas déroutant ? Mais ajoutez simplement un 2 à tinyint.
et ENUM
sont très étranges à gérer dans le code. Qu'il soit traité comme un entier ou une chaîne varie d'une langue à l'autre. 🎜🎜Dans cette méthode, la signification de chaque valeur doit être écrite dans le commentaire ou le code de la base de données🎜🎜🎜🎜Pour ces chaînes de longueur fixe, vous pouvez utiliser char
, tel que le code postal, qui est toujours 5 chiffres🎜 🎜Pour les chaînes de longueur inconnue, utilisez varchar
🎜🎜N'abusez pas de bigint
, comme le champ id
de la table qui enregistre le nombre d'articles, utilisez int
fera l'affaire, la limite supérieure de 2,1 milliards d'articles est suffisante🎜🎜Briser correctement le paradigme de la base de données et ajouter des champs redondants pour éviter les connexions de table lors des requêtes🎜🎜🎜Lors de l'interrogation, assurez-vous d'utiliser le type int
. Il est plus rapide que varchar
, car la comparaison d'entiers peut être réalisée en appelant directement l'opérateur sous-jacent, tandis que la comparaison de chaînes nécessite des caractères- comparaison par caractère. 🎜🎜La requête de données de longueur fixe est plus rapide que la requête de données de longueur variable, car le décalage entre les données de longueur fixe et les données est fixe et il est facile de calculer le décalage des données suivantes. Pour les données de longueur variable, une étape supplémentaire est nécessaire pour interroger le décalage des données suivantes. mais. Les données de longueur fixe peuvent gaspiller davantage d'espace de stockage. 🎜Répartition des grandes tables
Pour les tables dont le volume de données peut dépasser 5 millions dans un avenir proche ou croître rapidement, assurez-vous de diviser les tables verticalement ou horizontalement à l'avance. Lorsque le volume de données dépasse un million, la vitesse de requête sera. déclin évident.
Essayez de finaliser le plan de la sous-base de données et de la sous-table dès le début de la conception de la base de données, sinon cela augmentera considérablement la complexité du code et sera difficile à modifier plus tard.
Le partitionnement vertical de la table est basé sur des variables externes telles que les dates, et le partitionnement horizontal de la table est basé sur certaines relations de champs dans la table, en utilisant le mappage de hachage pour diviser la table en parties égales.
La condition préalable pour la sous-base de données et la sous-base de données de table est qu'avant d'exécuter l'instruction de requête, vous sachiez déjà dans quelle sous-base de données et dans quelle sous-table les données à interroger peuvent appartenir.
Optimiser les instructions de requête
C'est l'initiateur de goulots d'étranglement dans les bases de données dans de nombreux systèmes.
- Veuillez essayer d'utiliser des requêtes simples et évitez d'utiliser des liens de table
- Veuillez essayer d'éviter les analyses de table complètes. Les instructions qui entraîneront des analyses de table complètes incluent, sans s'y limiter :
- La condition de la clause Where est toujours vraie ou vide .
- Utilisez
LIKE
LIKE
- 使用不等操作符(<>、!=)
- 查询含有
is null
的列 - 在非索引列上使用
or
Utilisez les opérateurs d'inégalité (<>, !=)
Requête des colonnes contenant - Utilisez
ou sur des colonnes non indexées
- Lors d'une requête avec plusieurs conditions, veuillez mettre des conditions de requête simples ou une requête de colonne d'index devant
- Veuillez essayer de spécifier les colonnes que vous devez interroger, ne soyez pas paresseux pour utiliser select *
Si vous ne le précisez pas, il renverra d'une part les données redondantes, la bande passante occupée, etc. - D'autre part, lorsque MySQL exécute une requête, s'il n'y a pas de champs, il interrogera d'abord les champs de la table structure
- Les mots-clés de requête en majuscules sont un peu plus rapides que les minuscules
- L'utilisation de sous-requêtes La création d'une table temporaire sera légèrement plus lente que JOIN et UNION
- Essayez de ne pas utiliser les fonctions de base de données lors des requêtes sur les champs d'index, car cela n'est pas pratique pour mettre en cache les résultats de la requête
est nul
Lorsque vous n'avez besoin que d'une seule ligne de données, veuillez utiliser LIMIT 1. Si les données sont trop nombreuses, veuillez définir LIMIT de manière appropriée, requête de paginationNe commandez jamais ORDER BY RAND(), les performances sont extrêmement faibles
- Ajouter du cache
- Utilisez Redis et d'autres caches, ainsi que le cache de fichiers local, etc., ce qui peut réduire considérablement le nombre de requêtes de base de données. En matière de mise en cache, vous devez analyser les caractéristiques des données de votre propre système et faire les choix appropriés.
- Certaines données couramment utilisées, telles que les informations de configuration, etc., peuvent être placées dans le cache
- La structure des tables de la base de données peut être mise en cache localement
Les données mises en cache doivent être mises à jour dans le temps et la validité. la période doit être définie. Il est nécessaire d'augmenter le cache. Pour augmenter la complexité du système, assurez-vous de faire attention aux compromis
Vérifiez la structure de la table de données🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données

L'installation de MySQL sur CENTOS implique les étapes suivantes: Ajout de la source MySQL YUM appropriée. Exécutez la commande YUM Install MySQL-Server pour installer le serveur MySQL. Utilisez la commande mysql_secure_installation pour créer des paramètres de sécurité, tels que la définition du mot de passe de l'utilisateur racine. Personnalisez le fichier de configuration MySQL selon les besoins. Écoutez les paramètres MySQL et optimisez les bases de données pour les performances.

La clé de l'installation de MySQL est d'élégance pour ajouter le référentiel MySQL officiel. Les étapes spécifiques sont les suivantes: Téléchargez la clé GPG officielle MySQL pour empêcher les attaques de phishing. Ajouter un fichier de référentiel MySQL: RPM -UVH https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Mise à jour du référentiel Cache: Yum Update Installation Mysql: Yum install install install starting starting mysql Service: SystemCTL start start mysqld starger bugo boartup Service mysql Service: SystemCTL start start mysqld starger bugo bo onthing staring Service mysql Service: SystemCTL Start Start MySQLD Set Out Up Boaching Staring Service MySQL Service: SystemCTL Start Start MysQL
