Nouvelle collection de fonctionnalités MySQL 8.0

Officiellement, MySQL 8 est 2 fois plus rapide que MySQL 5.7, et il apporte également beaucoup d'améliorations et des performances plus rapides!

Remarque: la mise à niveau de MySQL 5.7 vers MySQL 8.0 ne prend en charge que les mises à niveau sur place et ne prend pas en charge la
rétrogradation de MySQL 8.0 vers MySQL 5.7 (ou la rétrogradation d'une version de MySQL 8.0 vers une version antérieure de MySQL 8.0
). La seule alternative prise en charge consiste à sauvegarder les données avant la mise à niveau.

Ce qui suit est une brève introduction aux nouvelles fonctionnalités et améliorations à prendre en compte dans MySQL 8.

1. Performance

MySQL 8.0 est 2 fois plus rapide que MySQL 5.7.

MySQL 8.0 offre de meilleures performances dans les domaines suivants: charges de travail en lecture / écriture, charges de travail intensives en E / S et charges de travail hautement compétitives (problèmes de concurrence des points chauds "hot spot").
Insérez la description de l'image ici
2. NoSQL

MySQL a fourni des fonctions de stockage NoSQL depuis la version 5.7, et cette partie de la fonction a également été grandement améliorée dans la version 8.0. Cette fonctionnalité élimine le besoin d'une base de données de documents NoSQL indépendante, et le stockage de documents MySQL fournit également une prise en charge des transactions multi-documents et une conformité ACID complète pour les documents JSON sans schéma.
Insérez la description de l'image ici

3. Fonctions de la fenêtre

À partir de MySQL 8.0, un nouveau concept appelé fonction de fenêtre a été ajouté, qui peut être utilisé pour implémenter plusieurs nouvelles méthodes de requête. Les fonctions de fenêtre sont similaires aux fonctions d'agrégation telles que SUM () et COUNT (), mais elles ne combinent pas plusieurs lignes de résultats de requête en une seule ligne, mais remettent les résultats dans plusieurs lignes. En d'autres termes, la fonction de fenêtre ne nécessite pas GROUP BY.

4. index invisible (index invisible)
Dans MySQL 8.0, l'index peut être "caché" et "afficher". Lorsque l'index est masqué, il ne sera pas utilisé par l'optimiseur de requêtes, mais l'index est toujours sur le disque, les statistiques sont toutes là et les données continueront d'être gérées automatiquement. Nous pouvons utiliser cette fonctionnalité pour le débogage des performances, par exemple, nous masquons d'abord un index, puis observons son impact sur la base de données. Si les performances de la base de données ont diminué, indiquant que l'index est utile, puis "restaurer l'affichage"; s'il n'y a pas de changement visible dans les performances de la base de données, cela indique que l'index est redondant et peut être considéré comme supprimé .

-- 查看有没有invisible的索引:
select index_name,is_visible from information_schema.statistics where table_schema='world' and table_name="city";

Insérez la description de l'image ici


```sql
-- 创建visible索引:
alter table city add index idx(name) visible;
select index_name,is_visible from information_schema.statistics where table_schema='world' and table_name="city";
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210324110710640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMyMDY2MA==,size_16,color_FFFFFF,t_70)

```sql
-- 修改visible索引为invisible索引:
alter table city alter index idx  invisible;
select index_name,is_visible from information_schema.statistics where table_schema='world' and table_name="city";

Insérez la description de l'image ici

5. Index inversé
MySQL 8.0 prend en charge le tri des index par ordre décroissant, et les valeurs de cet index seront également triées par ordre décroissant.


```sql
-- 示例:
select * from city where country=xx order by city asc, num desc;
idx(country,city,num desc)

创建倒序索引 :
alter table city add index idx(country,city,num desc);

6. Encodage UTF-8
À partir de MySQL 8, utf8mb4 est utilisé comme jeu de caractères par défaut de MySQL (auparavant le jeu de caractères par défaut latin1), et le classement par défaut a été changé de latin1_swedish_ci à utf8mb4_800_ci_ai.

Les modifications par défaut s'appliquent aux outils de commande libmysql et serveur ainsi qu'au serveur lui-même.

Les modifications sont également reflétées dans le test MTR, qui s'exécute à l'aide du nouveau jeu de caractères par défaut.

Ajout de la prise en charge des règles de tri sensibles à la casse et aux accents. MySQL 8.0 prend en charge les 3 niveaux de poids de classement définis par DUCET (table d'entrée de classement Unicode par défaut).

7.JSON

MySQL 8.0 ajoute de nouvelles fonctions JSON et améliore les performances de tri et de regroupement des valeurs JSON.

Syntaxe étendue de la portée dans l'expression de chemin JSON

MySQL 8.0 étend la syntaxe des plages dans les expressions de chemin JSON. Par exemple, SELECT
JSON_EXTRACT ('[1, 2, 3, 4, 5]', '$ [1 à 3]'); result [2, 3, 4]. La nouvelle syntaxe introduite est un sous-ensemble de la syntaxe standard SQL, décrite dans SQL: 2016, 9.39 SQL / JSON Path Language: Syntax and Semantics.

Fonction de table JSON
MySQL 8.0 ajoute la fonction de table JSON, qui permet l'utilisation de mécanismes SQL pour traiter les données JSON. JSON_TABLE () crée une vue relationnelle des données JSON. Il mappe les résultats de l'évaluation des données JSON aux lignes et colonnes relationnelles. Les utilisateurs peuvent utiliser SQL pour interroger les résultats renvoyés par la fonction sous forme de tables relationnelles normales, telles que des jointures, des éléments et des agrégations.

La fonction d'agrégation JSON
MySQL 8.0 ajoute la fonction d'agrégation JSON_ARRAYAGG () pour générer des tableaux JSON et JSON_OBJECTAGG () pour générer des objets JSON. De cette façon, les documents JSON sur plusieurs lignes peuvent être combinés dans des tableaux JSON ou des objets JSON.

Fonction de fusion JSON
La fonction JSON_MERGE_PATCH () implémente la sémantique de JavaScript (et d'autres langages de script) spécifiée par RFC7396, c'est-à-dire qu'elle supprime les doublons avec la priorité du deuxième document. Par exemple,. JSON_MERGE ('{"a": 1, "b": 2}', '{"a": 3, "c": 4}'); # renvoie {"a": 3, "b": 2, "C": 4}
La fonction JSON_MERGE_PRESERVE () a la sémantique de JSON_MERGE () implémentée dans MySQL 5.7, qui conserve toutes les valeurs, par exemple, JSON_MERGE ('{"a": 1, "b": 2}', ' {"A": 3, "c": 4} '); # renvoie {"a": [1,3], "b": 2, "c": 4}.
Pas dans JSON_MERGE () MySQL 8.0 It Il est recommandé d'utiliser les fonctions existantes pour éliminer l'ambiguïté de l'opération de fusion.

8. Fonctionnement IPV6

MySQL 8.0 améliore la disponibilité des opérations IPv6 en prenant en charge les opérations au niveau du bit sur le type de données BINARY. Dans MySQL 5.6, nous avons introduit les fonctions INET6_ATON () et INET6_NTOA () pour convertir l'adresse IPv6 VARBINARY (16) entre les formats de texte (tels que'fe80 :: 226: b9ff: fe77: eb17 'et). Cependant, jusqu'à présent, nous n'avons pas été en mesure de combiner ces fonctions IPv6 avec des opérations au niveau du bit, car de telles opérations convertiraient (à tort) la sortie en BIGINT. Par exemple, si nous avons une adresse IPv6 et que nous voulons la tester par rapport à un masque de réseau, nous pouvons l'utiliser maintenant car elle renvoie correctement le type de données (128 bits).

9. Effectuer des opérations au niveau du bit sur les types de données binaires

MySQL 8.0 étend les opérations au niveau du bit ("ET au niveau du bit", etc.) afin qu'il puisse également être utilisé avec [VAR] BINARY / [TINY | MEDIUM | LONG] BLOB. Dans les versions antérieures à la version 8.0, seuls les nombres entiers prennent en charge les opérations sur les bits. Si vous utilisez des opérations au niveau du bit sur des fichiers binaires, les paramètres seront implicitement convertis en BIGINT (64 bits) avant l'opération, de sorte que les bits peuvent être perdus. À partir de la version 8.0, les opérations au niveau du bit sont applicables à tous les types de données BINARY et BLOB, et les paramètres sont forcés de se convertir afin que les bits ne soient pas perdus.

10. Fonctionnement de l'UUID

MySQL 8.0 améliore la convivialité des opérations UUID en implémentant trois nouvelles fonctions SQL UUID_TO_BIN () (BIN_TO_UUID () et IS_UUID ()). Le premier convertit le texte au format UUID en VARBINARY (16), le second convertit le texte au format VARBINARY (16) UUID, et le dernier vérifie la validité du texte au format UUID. VARBINARY (16) peut utiliser l'index de fonction pour indexer l'UUID stocké sous. Les fonctions UUID_TO_BIN () et UUID_TO_BIN () peuvent également jouer de manière aléatoire des bits liés au temps et les déplacer au début pour les rendre indexables et éviter l'insertion aléatoire dans l'arbre B, réduisant ainsi le temps d'insertion.

11. Fiabilité

MySQL 8.0 améliore la fiabilité globale de MySQL car:
MySQL 8.0 stocke ses métadonnées dans le moteur de stockage transactionnel éprouvé InnoDB. Les tables système (par exemple, les utilisateurs et les privilèges) et les dictionnaires de données sont représentés dans InnoDB.
MySQL 8.0 élimine une source potentielle d'incohérence. Dans les versions 5.7 et antérieures, il existe en fait deux dictionnaires de données, un pour la couche serveur et un pour la couche InnoDB. Dans certaines situations de crash, ils peuvent être désynchronisés. Dans la version 8.0, il n'y a qu'un seul dictionnaire de données.
MySQL 8.0 garantit une DDL atomique et sûre en cas de crash. De cette manière, vous pouvez vous assurer que l'utilisateur peut exécuter complètement ou non des instructions DDL. Ceci est particulièrement important dans un environnement de réplication, sinon, dans certains cas, le serveur maître et le serveur esclave (nœuds) seront désynchronisés, ce qui entraînera une dérive des données.

12.undo espace de table

MySQL 8.0 donne aux utilisateurs un contrôle complet sur les tablespaces d'annulation, c'est-à-dire combien il y a d'espaces de table, où ils sont placés et combien de segments d'annulation se trouvent dans chaque table.
N'annulez plus les journaux dans l'espace de table système. Au cours du processus de mise à niveau, le journal des annulations sera migré de l'espace de table système vers l'espace de table d'annulation. Cela fournit un chemin de mise à niveau pour les installations 5.7 existantes qui utilisent l'espace de table système pour stocker le journal d'annulation.
L'espace de table d'annulation peut être géré séparément de l'espace de table système. Par exemple, vous pouvez placer l'espace de table d'annulation dans un stockage rapide.
Récupérez l'espace occupé par des transactions inhabituellement importantes (en ligne). Créez au moins deux tablespaces d'annulation pour permettre à l'espace de table d'être tronqué. Cela permet à InnoDB de réduire le tablespace d'annulation, car un tablespace d'annulation peut être actif et un autre tablespace d'annulation peut être tronqué.
Plus il y a de segments d'annulation, moins d'expropriation. Les utilisateurs peuvent choisir d'avoir jusqu'à 127 tablespaces d'annulation, chacun avec jusqu'à 128 segments d'annulation. Un plus grand nombre de segments d'annulation signifie que les transactions simultanées sont plus susceptibles d'utiliser un segment d'annulation distinct pour son journal d'annulation, réduisant ainsi la conquête des mêmes ressources.

13. Plug-in de chiffrement

MySQL 8.0 a changé le plugin d'authentification par défaut de mysql_native_password en caching_sha2_password. En conséquence, libmysqlclient utilisera également caching_sha2_password comme mécanisme d'authentification par défaut. Le nouveau caching_sha2_password combine une meilleure sécurité (algorithme SHA2) et de hautes performances (mise en cache).

Rôle 14.SQL

MySQL 8.0 implémente les rôles SQL. Un rôle est une collection nommée de privilèges. Le but est de simplifier la gestion des droits d'accès des utilisateurs. Vous pouvez attribuer des rôles aux utilisateurs, accorder des privilèges aux rôles, créer des rôles, supprimer des rôles et déterminer les rôles applicables pendant la session.

Ce qui précède présente MySQL 8.0 avec de nouvelles fonctionnalités et des améliorations de performances. Pour plus de détails, cliquez sur:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html

https://blogs.oracle.com/mysql/announcing-general-availability-of-mysql-80

https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/

Pour un contenu plus passionnant, veuillez prêter attention au compte public WeChat

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45320660/article/details/115166830
conseillé
Classement