Maison base de données tutoriel mysql MySQL内部临时表策略_MySQL

MySQL内部临时表策略_MySQL

Jun 01, 2016 pm 01:41 PM
策略

bitsCN.com
MySQL内部临时表策略 通过对MySQL数据库源码的跟踪和调试,以及参考MySQL官方文档,对MySQL内部临时表使用策略进行整理,以便于更加深入的理解。使用内部临时表条件     MySQL内部临时表的使用有一定的策略,从源码中关于SQL查询是否需要内部临时表。可以总结如下:     1、DISTINCT查询,但是简单的DISTINCT查询,比如对primary key、unique key等DISTINCT查询时,查询优化器会将DISTINCT条件优化,去除DISTINCT条件,也不会创建临时表;     2、不是第一个表的字段使用ORDER BY 或者GROUP BY;      3、ORDER BY和GROUP BY使用不同的顺序;     4、用户需要缓存结果;         5、ROLLUP查询。      源码如下所示     代码地址:sql_select.cc:854,函数:JOIN::optimize(),位置:sql_select.cc:1399  /*    Check if we need to create a temporary table.    This has to be done if all tables are not already read (const tables)    and one of the following conditions holds:    - We are using DISTINCT (simple distinct's are already optimized away)    - We are using an ORDER BY or GROUP BY on fields not in the first table    - We are using different ORDER BY and GROUP BY orders    - The user wants us to buffer the result.    When the WITH ROLLUP modifier is present, we cannot skip temporary table    creation for the DISTINCT clause just because there are only const tables.  */      need_tmp= (( const_tables != tables &&               (( select_distinct || !simple_order || !simple_group) ||                ( group_list && order ) ||                test(select_options & OPTION_BUFFER_RESULT))) ||             ( rollup.state != ROLLUP:: STATE_NONE && select_distinct )); 内部临时表使用原则     但是使用了内部临时表,那么他是怎么存储的呢?原则是这样的:     1、当查询结果较小的情况下,使用heap存储引擎进行存储。也就是说在内存中存储查询结果。     2、当查询结果较大的情况下,使用myisam存储引擎进行存储。     3、当查询结果最初较小,但是不断增大的情况下,将会有从heap存储引擎转化为myisam存储引擎存储查询结果。          什么情况算是查询结果较小呢?从源码中if的几个参数可以看出:     1、有blob字段的情况;     2、使用唯一限制的情况;     3、当前表定义为大表的情况;     4、查询结果的选项为小结果集的情况;     5、查询结果的选项为强制使用myisam的情况。              源码如下所示     代码地址:sql_select.cc:10229,函数:create_tmp_table(),位置:sql_select.cc:10557  /* If result table is small; use a heap */  /* future: storage engine selection can be made dynamic? */  if ( blob_count || using_unique_constraint      || ( thd->variables .big_tables && !( select_options & SELECT_SMALL_RESULT ))      || ( select_options & TMP_TABLE_FORCE_MYISAM ))  {    share->db_plugin = ha_lock_engine(0, myisam_hton);    table->file = get_new_handler( share, &table ->mem_root,                                 share->db_type ());    if (group &&          ( param->group_parts > table-> file->max_key_parts () ||           param->group_length > table-> file->max_key_length ()))      using_unique_constraint=1;  }  else  {    share->db_plugin = ha_lock_engine(0, heap_hton);    table->file = get_new_handler( share, &table ->mem_root,                                 share->db_type ());  }        代码地址:sql_select.cc:11224,函数:create_myisam_from_heap(),位置:sql_select.cc:11287 /*    copy all old rows from heap table to MyISAM table    This is the only code that uses record[1] to read/write but this    is safe as this is a temporary MyISAM table without timestamp/autoincrement    or partitioning.  */  while (! table->file ->rnd_next( new_table.record [1]))  {    write_err= new_table .file-> ha_write_row(new_table .record[1]);    DBUG_EXECUTE_IF("raise_error" , write_err= HA_ERR_FOUND_DUPP_KEY ;);    if (write_err )      goto err ;  }官方文档相关内容     以上内容只是源码表面的问题,通过查询MySQL的官方文档,得到了更为权威的官方信息。     临时表创建的条件:     1、如果order by条件和group by的条件不一样,或者order by或group by的不是join队列中的第一个表的字段。     2、DISTINCT联合order by条件的查询。     3、如果使用了SQL_SMALL_RESULT选项,MySQL使用memory临时表,否则,查询询结果需要存储到磁盘。     临时表不使用内存表的原则:     1、表中有BLOB或TEXT类型。     2、group by或distinct条件中的字段大于512个字节。     3、如果使用了UNION或UNION ALL,任何查询列表中的字段大于512个字节。              此外,使用内存表最大为tmp_table_size和max_heap_table_size的最小值。如果超过该值,转化为myisam存储引擎存储到磁盘。
 参考资料:1、MySQL源码:MySQL-5.5.202、MySQL官方文档:http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html  作者 king_wangheng bitsCN.com

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Points clés de la stratégie de prix et de la conception des promotions dans le système de vente flash PHP Points clés de la stratégie de prix et de la conception des promotions dans le système de vente flash PHP Sep 19, 2023 pm 02:18 PM

Points clés de la stratégie de prix et de la conception des promotions dans le système de vente flash PHP Dans un système de vente flash, la stratégie de prix et la conception des promotions sont des éléments très importants. Des stratégies de prix raisonnables et des promotions bien conçues peuvent inciter les utilisateurs à participer à des activités de vente flash et améliorer l'expérience utilisateur et la rentabilité du système. Ce qui suit présentera en détail les points clés de la stratégie de prix et de la conception des activités promotionnelles dans le système de vente flash PHP, et fournira des exemples de code spécifiques. 1. Points clés dans la conception d’une stratégie de prix : Déterminer le prix de référence : Dans le système de vente flash, le prix de référence fait référence au prix du produit lorsqu’il est normalement vendu. exister

exe en php : une stratégie efficace pour réaliser l'expansion des fonctions exe en php : une stratégie efficace pour réaliser l'expansion des fonctions Mar 04, 2024 pm 09:36 PM

EXE vers PHP : une stratégie efficace pour étendre les fonctions. Avec le développement d'Internet, de plus en plus d'applications ont commencé à migrer vers le Web pour obtenir un accès utilisateur plus large et des opérations plus pratiques. Dans ce processus, la demande de conversion de fonctions initialement exécutées sous forme de fichiers EXE (fichiers exécutables) en scripts PHP augmente également progressivement. Cet article explique comment convertir EXE en PHP pour réaliser une extension fonctionnelle et donne des exemples de code spécifiques. Pourquoi convertir EXE en PHP multiplateforme : PHP est un langage multiplateforme

Principe de jalonnement Astar, démantèlement des revenus, projets et stratégies de largage aérien et stratégie opérationnelle au niveau de la nounou Principe de jalonnement Astar, démantèlement des revenus, projets et stratégies de largage aérien et stratégie opérationnelle au niveau de la nounou Jun 25, 2024 pm 07:09 PM

Table des matières Principe de jalonnement d'Astar Dapp Revenus de jalonnement Démantèlement des projets potentiels de largage aérien : AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Stratégie et fonctionnement du jalonnement "AstarDapp Staking" a été mis à niveau vers la version V3 au début de cette année, et de nombreux ajustements ont été apportés aux revenus de jalonnement règles. À l'heure actuelle, le premier cycle de jalonnement est terminé et le sous-cycle de « vote » du deuxième cycle de jalonnement vient de commencer. Pour bénéficier des avantages « récompense supplémentaire », vous devez franchir cette étape critique (qui devrait durer jusqu'au 26 juin, soit moins de 5 jours). Je vais détailler les revenus du staking Astar,

Analyse complète des étapes et stratégies d'installation du logiciel CentOS7 Analyse complète des étapes et stratégies d'installation du logiciel CentOS7 Jan 04, 2024 am 09:40 AM

J'ai commencé à entrer officiellement en contact avec Linux en 2010. La distribution d'entrée de gamme était Ubuntu10.10, puis je suis passée à Ubunu11.04. Au cours de cette période, j'ai également essayé de nombreuses autres distributions grand public. Après mon entrée au laboratoire, j'ai commencé à utiliser CentOS5, puis CentOS6, et maintenant j'ai évolué vers CentOS7. J'utilise Linux depuis quatre ans. Les trois premières années ont été consacrées à déconner, à perdre beaucoup de temps et à acquérir beaucoup d'expérience et de leçons. Peut-être que je suis vraiment vieux maintenant et que je ne veux plus m'en soucier. J'espère juste qu'après avoir configuré un système, je pourrai continuer à l'utiliser. Pourquoi écrire/lire cet article ? Lorsque vous utilisez Linux, en particulier CentOS, vous rencontrerez des pièges, ou des choses que les personnes atteintes de mysophobie ne peuvent tolérer : des logiciels provenant de sources officielles

Analyse de la stratégie de cache MyBatis : bonnes pratiques pour le cache de premier niveau et le cache de deuxième niveau Analyse de la stratégie de cache MyBatis : bonnes pratiques pour le cache de premier niveau et le cache de deuxième niveau Feb 21, 2024 pm 05:51 PM

Analyse de la stratégie de cache MyBatis : bonnes pratiques pour le cache de premier niveau et le cache de deuxième niveau Lors du développement avec MyBatis, nous devons souvent réfléchir au choix de la stratégie de cache. Le cache de MyBatis est principalement divisé en deux types : le cache de premier niveau et le cache de deuxième niveau. Le cache de premier niveau est un cache de niveau SqlSession, tandis que le cache de deuxième niveau est un cache de niveau Mapper. Dans les applications pratiques, l’utilisation rationnelle de ces deux caches constitue un moyen important pour améliorer les performances du système. Cet article utilisera des exemples de code spécifiques pour analyser un MyBatis

Comment modifier la politique de mot de passe Windows 7 Comment modifier la politique de mot de passe Windows 7 Dec 23, 2023 pm 10:41 PM

La politique de mot de passe de win7 est liée au format de notre mot de passe, aux caractères requis pour le mot de passe, etc. Si la politique de mot de passe que nous définissons est trop complexe, cela peut nous rendre très gênant lors de l'utilisation de mots de passe, mais cela rendra également nos mots de passe plus difficiles. être piraté. Alors, comment changer la politique de mot de passe dans Win7 ? Jetons un coup d’œil ensemble ci-dessous. Tutoriel de changement de politique de mot de passe Win7 1. Appuyez sur "win+r" sur le clavier pour ouvrir Exécuter, entrez "gpedit.msc" 2. Appuyez sur Entrée pour confirmer et entrez dans l'éditeur de stratégie de groupe local. 3. Recherchez « Politique de mot de passe » selon le chemin indiqué dans la figure. 4. Double-cliquez pour ouvrir la « Politique de mot de passe » sur la droite. 5. Vous pouvez ensuite définir ces politiques de mot de passe sur la droite. (Double-cliquez pour ouvrir pour modifier) ​​6. Une fois les paramètres terminés, nous pouvons voir la politique globale de mot de passe.

Commentaires des utilisateurs et stratégies d'amélioration pour le système de blog PHP Commentaires des utilisateurs et stratégies d'amélioration pour le système de blog PHP Aug 09, 2023 am 10:58 AM

Commentaires des utilisateurs et stratégies d'amélioration du système de blog PHP Introduction : Avec la popularité et le développement d'Internet, les blogs sont devenus un moyen important pour les gens de partager leurs connaissances et leur expérience. Afin de répondre aux besoins des utilisateurs, il est crucial de développer un système de blog stable, facile à utiliser et complet. Cependant, à mesure que le logiciel continue d'itérer, les commentaires et suggestions des utilisateurs deviennent particulièrement importants car ils peuvent nous aider à découvrir les problèmes du système et à l'améliorer. Cet article discutera des commentaires des utilisateurs et des stratégies d'amélioration du système de blog PHP, et expliquera les étapes et méthodes d'amélioration à travers des exemples de code.

Utilisation de structures de données basées sur des politiques pour le comptage inversé Utilisation de structures de données basées sur des politiques pour le comptage inversé Sep 02, 2023 pm 11:45 PM

Nous allons compiler le code dans le compilateur C++ en utilisant les fichiers d'en-tête g++. g++ est un en-tête basé sur Linux permettant de compiler du code pour des structures de données basées sur des politiques en C++. Les structures de données basées sur des stratégies sont des structures utilisées pour des performances élevées et une flexibilité dans votre code. Étant donné que ces structures de données sont très riches, nous pouvons les utiliser pour de nombreuses fonctions telles que rechercher un élément dans l'index, insérer un élément dans une position d'index, supprimer un élément d'une plage d'index, etc. La traduction chinoise de l'exemple est : Exemple Prenons un exemple d'inversion du décompte - supposons que le parcours interne pour construire l'arbre soit 1,2,3,4,5, lorsque nous parcourons pour l'inverser, la forme de l'arbre devient 5, 4,3,2,1 Prenons la structure arborescente suivante en entrée <5,4,3.

See all articles