Méthodes d'optimisation et d'indexation MySQL
Une brève introduction aux index
L'essence des index :
L'essence des index MySQL ou d'autres index de bases de données relationnelles n'est qu'une phrase, échangez de l'espace contre du temps.
Le rôle de l'index :
Indexer la structure des données de la base de données relationnelle (stockage sur disque) afin d'accélérer la récupération des données des lignes dans la table
Classification de l'index
Catégorie de l'index structure de données ci-dessus :
Index HASH
Haute efficacité de correspondance égale
Ne prend pas en charge la recherche par plage
Indice d'arbre
Binaire arbre, méthode de recherche binaire récursive, gauche petite droite Gros
Arbre binaire équilibré, d'arbre binaire à arbre binaire équilibré, la raison principale est la rotation gauche-droite
Inconvénient 1, trop de fois IO
Inconvénient 2, faible utilisation des IO, Saturation IO
Chemins multiples Arbre de recherche équilibré (B-Tree)
caractéristiques, réduisant considérablement la hauteur de l'arbre
B+ tree
fonctionnalités, en utilisant la comparaison fermée à gauche méthode
nœud de branche de nœud racine Il n'y a pas de zone de données, seuls les nœuds feuilles contiennent la zone de données (pour parler franchement, même si le nœud racine et les nœuds enfants ont été localisés, cela ne s'arrêtera pas car il n'y a pas de zone de données , et continuera jusqu'à ce que le nœud feuille soit trouvé.)
Lorsque nous recherchons les données 13, nous pouvons localiser à la fois le nœud racine et le nœud enfant, mais nous trouverons toujours le nœud feuille.
Arbre binaire Arbre binaire équilibré, comparaison B-tree :
Comme le montre la figure, s'il s'agit d'une clé primaire auto-croissante :
L'arbre binaire n'est évidemment pas adapté aux bases de données relationnelles indexation (pas différent de l'analyse complète de la table) .
Quant à l'arbre binaire équilibré, bien qu'il résolve cette situation, il rendra également l'arbre mince et grand, ce qui entraînera également trop de temps d'E/S de requête et une faible utilisation des E/S mentionnée ci-dessus.
B-tree a évidemment résolu ces deux problèmes, donc ce qui suit explique pourquoi MySQL utilise toujours l'arbre B+ dans ce cas et a apporté ces améliorations.
Comparaison du B-tree et du B+-tree :
Optimisation de l'arbre B+ sur le B-tree :
IO est plus efficace (chaque nœud du B-tree conservera le zone de données, contrairement aux arbres B+. En supposant que nous devions parcourir trois couches pour interroger une donnée, alors évidemment la consommation d'E/S dans la requête d'arborescence B+ est plus petite)
L'efficacité de la recherche de plage est plus élevée (comme indiqué dans le figure, l'arbre B+ a formé une forme de liste chaînée naturelle, et n'a besoin d'être basé que sur la dernière recherche de structure de chaîne)
L'analyse des données basée sur un index est plus efficace.
Classification des types d'index
Les types d'index peuvent être divisés en deux catégories :
Index de clé primaire
index auxiliaire (index secondaire)
Index unique
-
Indice composé
Index normal
Indice de couverture
Bien que les performances de l'index de clé primaire soient relativement meilleures, généralement dans l'optimisation SQL, nous améliorerons et compléterons l'index auxiliaire.
L'arborescence B+ est implémentée au niveau du moteur de stockage
Nous créons respectivement deux tables
test_innodb
(en utilisant InnoDB comme moteur de stockage) test_myisam (en utilisant MyISAM comme moteur de stockage) La figure suivante représente les fichiers pertinents pour l'implémentation du disque des deux tables. Les deux moteurs de stockage sur le plancher de disque d'arborescence B+ sont complètement différents.
L'arborescence B+ est implémentée dans MyISAM :
*.frm est un fichier squelette de table. Par exemple, quel type de champ de nom de champ d'identifiant dans cette table est stocké ici
. *.MYD (D=data) stocke les données
*.MYI (I=index) stocke l'index
Par exemple, si l'instruction SQL suivante est exécutée maintenant, alors dans MyISAM, elle est d'abord dans test_myisam.MYI, recherchez-y 103, obtenez l'adresse 0x194281, puis recherchez les données dans test_myisam.MYD et renvoyez-les.
SELECT id,name from test_myisam where id =103
如果
test_myisam
表中,id为主键索引,name也是一个索引,那么在test_myisam.MYI中则会有两个平级的B+树,这也导致MyISAM引擎中主键索引和二级索引是没有主次之分的,是平级关系。因为这种机制在MyISAM引擎中,有可能使用多个索引,在InnoDB中则不会出现这种情况。
B+树在InnoDB落地:
InnoDB不像MyISAM来独立一个MYD 文件来存储数据,它的数据直接存储在叶子结点关键字对应的数据区在这保存这一个id列所有行的详细记录。
InnoDB 主键索引和辅助索引关系
我们现在执行如下SQL语句,他会先去找辅助索引,然后找到辅助索引下101的主键,再去回表(二次扫描)根据主键索引查询103这条数据将其返回。
SELECT id,name from test_myisam where name ='zhangsan'
这里就有一个问题了,为什么不像MyISAM在辅助索引下直接记录磁盘地址,而是要多此一举再去回表扫描主键索引,这个问题在下面相关面试题中回答,记一下这个问题是这里来的。
相关面试题
为什么MySQL选择B+树作为索引结构
这个就不说了,上文应该讲清楚了。
B+树在MyISAM和InnoDB落地区别。
这个可以总结一下,MyISAM落地数据储存会有三个类型文件 ,.frm文件是表骨架文件,.MYD(D=data)则储存数据 ,.MYI (I=index)则储存索引,MyISAM引擎中主键索引和二级索引平级关系,在MyISAM引擎中,有可能使用多个索引,InnoDB则相反,主键索引和二级索有严格的主次之分在InnoDB一条语句只能用一个索引要么不用。
如何判断一条sql语句是否使用了索引。
可以通过执行计划来判断 可以在sql语句前explain/ desc
set global optimizer_trace='enabled=on' 打开执行计划开关他将会把每一条查询sql执行计划记录在information_schema 库中OPTIMIZER_TRACE表中
为什么主键索引最好选择自增列?
自增列,数据插入时整个索引树是只有右边在增加的,相对来说索引树的变动更小。
为什么经常变动的列不建议使用索引?
和上一个问题原因一样,当一个索引经常发生变化,那么就意味这,这个缩印树也要经常发生变化。4
为什么说重复度高的列,不建议建立索引?
这个原因是因为离散性,比如说,一张一百万数据的表,其中一个字段代表性别,0代表男1代表女,把这字段加了索引,那么在索引树上,将会有大量的重复数据。而我们常见的索引建立一般都是驱动型的。其目的是,尽可能的删减数据的查询范围,这个显然是不匹配的。
什么是联合索引
联合索引是一个包含了多个功效的索引,他只是一个索引而不是多个,
其次,单列索引是一种特殊的联合索引
联合索引的创立要遵循最左前置原则(最常用列>离散度>占用空间小)
什么是覆盖索引
通过索引项信息可直接返回所需要查询的索引列,该索引被称之为覆盖索引,说白了就是不需要做回表操作,可以从二级索引中直接取到所需数据。
什么是ICP机制
索引下推,简单点来说就是,在sql执行过程中,面对where多条件过滤时,通过一个索引,完成数据搜索和过滤条件其,特点能减少io操作。
在InnoDB表中不可能没有主键对还是不对原因是什么?
首先这句话是对的,但是情况有三种:
C'est-à-dire que lorsque vous spécifiez manuellement ce champ comme clé primaire, ce champ sera utilisé comme index clusterisé.
Il existe deux situations dans lesquelles la clé primaire n'est pas explicitement spécifiée :
Il recherchera le premier Royaume-Uni (clé unique) comme index de clé primaire pour organiser la disposition des index.
Si ni la clé primaire ni le Royaume-Uni ne sont spécifiés, le rowId (chaque enregistrement de la table InnoDB aura un rowId caché (6 octets)) sera utilisé comme index clusterisé.
Qu'est-ce qu'une opération de retour de table
Dans InnoDB, le contenu interrogé en fonction de l'index auxiliaire ne peut pas être obtenu directement à partir de l'index auxiliaire. L'opération qui nécessite une analyse secondaire basée sur la clé primaire. index est appelé une opération de retour de table.
Pourquoi la zone de données du nœud feuille d'index auxiliaire dans InnoDB enregistre-t-elle la valeur de l'index de clé primaire au lieu d'enregistrer l'adresse du disque comme dans MyISAM.
La raison est en fait très simple, car la structure des données de l'index de clé primaire change fréquemment. Si l'adresse du disque est enregistrée dans la zone de données d'index auxiliaire, alors en supposant que nous ayons 10 index auxiliaires, lorsque notre index de clé primaire est enregistré. changements de structure Enfin, les index auxiliaires doivent être notifiés un par un, et la structure de l'index de clé primaire change fréquemment, et les ajouts et suppressions peuvent affecter sa structure de données.
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

AI Hentai Generator
Générez AI Hentai gratuitement.

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)

MySQL convient aux débutants car il est simple à installer, puissant et facile à gérer les données. 1. Installation et configuration simples, adaptées à une variété de systèmes d'exploitation. 2. Prise en charge des opérations de base telles que la création de bases de données et de tables, d'insertion, d'interrogation, de mise à jour et de suppression de données. 3. Fournir des fonctions avancées telles que les opérations de jointure et les sous-questionnaires. 4. Les performances peuvent être améliorées par l'indexation, l'optimisation des requêtes et le partitionnement de la table. 5. Prise en charge des mesures de sauvegarde, de récupération et de sécurité pour garantir la sécurité et la cohérence des données.

Créez une base de données à l'aide de NAVICAT Premium: Connectez-vous au serveur de base de données et entrez les paramètres de connexion. Cliquez avec le bouton droit sur le serveur et sélectionnez Créer une base de données. Entrez le nom de la nouvelle base de données et le jeu de caractères spécifié et la collation. Connectez-vous à la nouvelle base de données et créez le tableau dans le navigateur d'objet. Cliquez avec le bouton droit sur le tableau et sélectionnez Insérer des données pour insérer les données.

Navicat lui-même ne stocke pas le mot de passe de la base de données et ne peut récupérer que le mot de passe chiffré. Solution: 1. Vérifiez le gestionnaire de mots de passe; 2. Vérifiez la fonction "Remember Motway" de Navicat; 3. Réinitialisez le mot de passe de la base de données; 4. Contactez l'administrateur de la base de données.

MySQL est un système de gestion de base de données relationnel open source. 1) Créez une base de données et des tables: utilisez les commandes CreateDatabase et CreateTable. 2) Opérations de base: insérer, mettre à jour, supprimer et sélectionner. 3) Opérations avancées: jointure, sous-requête et traitement des transactions. 4) Compétences de débogage: vérifiez la syntaxe, le type de données et les autorisations. 5) Suggestions d'optimisation: utilisez des index, évitez de sélectionner * et utilisez les transactions.

NAVICAT pour MARIADB ne peut pas afficher directement le mot de passe de la base de données car le mot de passe est stocké sous forme cryptée. Pour garantir la sécurité de la base de données, il existe trois façons de réinitialiser votre mot de passe: réinitialisez votre mot de passe via Navicat et définissez un mot de passe complexe. Affichez le fichier de configuration (non recommandé, haut risque). Utilisez des outils de ligne de commande système (non recommandés, vous devez être compétent dans les outils de ligne de commande).

MySQL et SQL sont des compétences essentielles pour les développeurs. 1.MySQL est un système de gestion de base de données relationnel open source, et SQL est le langage standard utilisé pour gérer et exploiter des bases de données. 2.MySQL prend en charge plusieurs moteurs de stockage via des fonctions de stockage et de récupération de données efficaces, et SQL termine des opérations de données complexes via des instructions simples. 3. Les exemples d'utilisation comprennent les requêtes de base et les requêtes avancées, telles que le filtrage et le tri par condition. 4. Les erreurs courantes incluent les erreurs de syntaxe et les problèmes de performances, qui peuvent être optimisées en vérifiant les instructions SQL et en utilisant des commandes Explication. 5. Les techniques d'optimisation des performances incluent l'utilisation d'index, d'éviter la numérisation complète de la table, d'optimiser les opérations de jointure et d'améliorer la lisibilité du code.

Vous pouvez créer une nouvelle connexion MySQL dans NAVICAT en suivant les étapes: ouvrez l'application et sélectionnez une nouvelle connexion (CTRL N). Sélectionnez "MySQL" comme type de connexion. Entrez l'adresse Hostname / IP, le port, le nom d'utilisateur et le mot de passe. (Facultatif) Configurer les options avancées. Enregistrez la connexion et entrez le nom de la connexion.

Étapes pour effectuer SQL dans NAVICAT: Connectez-vous à la base de données. Créez une fenêtre d'éditeur SQL. Écrivez des requêtes ou des scripts SQL. Cliquez sur le bouton Exécuter pour exécuter une requête ou un script. Affichez les résultats (si la requête est exécutée).
