MySQL内部临时表策略_MySQL
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

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)

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 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

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,

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 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

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 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.

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.
