Maison  >  Article  >  base de données  >  Introduction détaillée aux tables temporaires et aux tables dérivées MySQL

Introduction détaillée aux tables temporaires et aux tables dérivées MySQL

黄舟
黄舟original
2017-03-25 14:09:271377parcourir

MySQLDans certains scénarios lors du traitement des requêtes, le serveur crée des tables temporaires internes. Autrement dit, la table est traitée en mémoire à l'aide du moteur MEMORY ou stockée sur le disque à l'aide du moteur MyISAM. Si la table est trop volumineuse, le serveur peut transférer la table temporaire en mémoire sur le disque.

À propos des tables dérivées

Lorsque la requête principale contient une table dérivée, ou lorsque l'instruction select contient une clause union, ou lorsque l'instruction select contient une clause order by pour un champ (clause group by pour un autre champ), afin de compléter la requête, MySQL doit créer automatiquement une table temporaire pour stocker l'ensemble de résultats temporaire. Cette table temporaire est créée et maintenue par MySQL lui-même et devient une table temporaire créée automatiquement. tableau. Pour les tables temporaires créées automatiquement, les performances de la table temporaire en mémoire étant supérieures, MySQL utilise toujours la table temporaire en mémoire en premier. Lorsque la table temporaire en mémoire devient trop volumineuse et atteint un certain seuil, la table temporaire en mémoire est vidée. une table temporaire externe. En d’autres termes, la table temporaire de stockage externe est une extension de la table temporaire de mémoire dans l’espace de stockage. Le seuil de transfert d'une table temporaire de mémoire vers une table temporaire de mémoire externe est déterminé par la plus petite valeur des variables système max_heap_table_size et tmp_table_size.

Les tables dérivées sont généralement utilisées dans la clause from. Par exemple :

select * from (select * from table) as t;

À propos des tables temporaires

Lorsque vous travaillez sur de très grandes tables, vous devrez parfois exécuter de nombreuses requêtes pour obtenir une petite quantité de données. sous-ensemble, plutôt que d'exécuter ces requêtes sur la table entière, il peut être plus rapide que MySQL trouve les quelques enregistrements nécessaires à la fois, sélectionne les enregistrements dans une table temporaire, puis exécute la requête sur ces tables.

Créer une table temporaire est simple, ajoutez simplement le mot-clé TEMPORARY à l'instruction CREATE TABLE normale :

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

)

La table temporaire existera tant que vous serez connecté à MySQL. Lorsque vous vous déconnectez, MySQL supprimera automatiquement la table et libérera l'espace utilisé. Bien sûr, vous pouvez laisser tomber la table et libérer de l'espace tout en restant connecté.

DROP TABLE tmp_table

Si une table nommée tmp_table existe déjà dans la base de données lorsque vous créez une table temporaire nommée tmp_table, la table temporaire devra masquer (cacher) la table non temporaire tmp_table .

Si vous déclarez la table temporaire comme étant une table HEAP, MySQL vous permet également de préciser qu'elle sera créée en mémoire :

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP

Comme la table HEAP est stockée en mémoire, les requêtes que vous exécutez dessus peuvent être plus rapides qu'une table temporaire sur disque. Cependant, les tables HEAP sont quelque peu différentes des tables ordinaires et ont leurs propres limites. Consultez le manuel de référence MySQL pour plus de détails.

Comme suggéré précédemment, vous devez tester les tables temporaires pour voir si elles sont réellement plus rapides que l'exécution de requêtes sur une grande base de données. Si les données sont bien indexées, la table temporaire risque de ne pas être rapide du tout.

1. Une fois la table temporaire déconnectée de MySQL, le système supprimera automatiquement les données de la table temporaire, mais cela se limite uniquement aux tables créées avec les instructions suivantes :

Définir les champs :

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

)

2) Importer directement les résultats de la requête dans la table temporaire

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

2 De plus, mysql permet également de créer des tables temporaires directement en mémoire, car c'est le cas. très rapide en mémoire. , la syntaxe est la suivante :

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP

3. D'après l'analyse ci-dessus, nous pouvons voir que les données de la table temporaire seront effacées automatiquement. lorsque vous déconnectez la connexion, mais dans votre programme, il est impossible de vous connecter à la base de données à chaque fois que vous émettez SQL (si tel est le cas, alors il y aura le problème qui vous inquiète, sinon, il n'y aura pas de problème) , car les données ne seront effacées que lorsque la connexion à la base de données sera déconnectée. Dans une connexion à la base de données, si vous exécutez SQL plusieurs fois, le système n'effacera pas automatiquement les données de la table temporaire.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn