MySQL优化器中一个Count和覆盖索引的问题_MySQL
bitsCN.com
MySQL优化器中一个Count和覆盖索引的问题
现象说明
其实这里主要要说明的是一个优化器还需要改进的地方。
优化器会根据where条件和select_list里面的字段决定在使用一个索引(sta)后,是否需要回表—回到聚集索引取数据。
基本的做法是:在确定了一个索引后,将select_list和where中出现的所有字段都拿来判断一下,如果字段都存在于sta索引中,则可以使用覆盖索引。
第一个explan可以用上覆盖索引(Using Index), 是因为select_list里面只有count(*),而count(*)在语法解析阶段就被特殊处理,不作为特殊字段。
第二个字段在现在的实现中,因为gmt不是sta索引的一部分(sta索引定义上只有sta一个字段,算上聚集索引结构,就是sta,auci)。所以最后判定为不能使用覆盖索引。
性能差别
表中放入500w数据以后,这两个查询的时间相差25倍(0.19s vs 5s)。
存在改进
其实我说这个“不科学”,是因为第二个语句居然不能使用覆盖索引。按照count(gmt)的语义,是计算gmt不为NULL的所有行的数目。但是表定义中,分分明已经说明了gmt为not null。那么就可以转成count(*)了!
目前因为count、sum、count(distinct)这些操作的处理方法被揉在一起,因此没有特别分开。
应用警惕
好在按照正常的习惯,需要计算总数时,最多是count(auci)或者count(*), 不会故意去count一个别的字段。当时若使用的是MyISAM,就需要小心了。
从上面的分析可以推测得到,如果这是个MyISAM表,还是一样的where条件,count(*)是可以使用覆盖索引的,但是count(auci)就不行了。

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)

Sujets chauds



Guide pratique de la méthode Where dans les collections Laravel Lors du développement du framework Laravel, les collections constituent une structure de données très utile qui fournit des méthodes riches pour manipuler les données. Parmi elles, la méthode Where est une méthode de filtrage couramment utilisée qui permet de filtrer les éléments d'une collection en fonction de conditions spécifiées. Cet article présentera l'utilisation de la méthode Where dans les collections Laravel et démontrera son utilisation à travers des exemples de code spécifiques. 1. Utilisation de base de la méthode Where

Comment utiliser la méthode Where dans la collection Laravel Laravel est un framework PHP populaire qui fournit une multitude de fonctions et d'outils pour permettre aux développeurs de créer rapidement des applications. Parmi eux, Collection est une structure de données très pratique et puissante dans Laravel. Les développeurs peuvent utiliser des collections pour effectuer diverses opérations sur les données, telles que le filtrage, le mappage, le tri, etc. Dans les collections, la méthode Where est une méthode couramment utilisée pour filtrer la collection en fonction de conditions spécifiées.

Du débutant au compétent : Maîtriser les compétences d'utilisation des sélecteurs est et où Introduction : Dans le processus de traitement et d'analyse des données, le sélecteur est un outil très important. Grâce à des sélecteurs, nous pouvons extraire les données requises de l'ensemble de données selon des conditions spécifiques. Cet article présentera les compétences d'utilisation des sélecteurs est et où pour aider les lecteurs à maîtriser rapidement les fonctions puissantes de ces deux sélecteurs. 1. Utilisation du sélecteur is Le sélecteur is est un sélecteur de base qui nous permet de sélectionner l'ensemble de données en fonction de conditions données.

Préface Lorsque nous écrivons des instructions SQL, nous ne pouvons éviter d'utiliser des mots-clés de connexion, tels que connexions internes et connexions externes. Il en existe de nombreux types. Je vais poster ici une image que j'ai trouvée ailleurs : je pense que cette image est très détaillée. Elle montre les types de liens courants dans les instructions SQL. Prenez leftjoin dans cet article comme exemple. Elle est disponible en ligne : le mot-clé LEFTJOIN renverra toutes les lignes de la table de gauche, même s'il n'y a aucune ligne correspondante dans la table de droite. En fait, littéralement, leftjoin est relativement facile à comprendre, mais il y a encore quelques problèmes lors de l'utilisation, par exemple, si la condition est après et après où, leurs résultats sont complètement différents.

Laravel est un framework de développement PHP populaire qui fournit des fonctions riches et pratiques. La collection est l'une des structures de données très importantes de Laravel. La classe collection fournit de nombreuses méthodes puissantes, dont la méthode Where. Cet article utilisera des exemples de code spécifiques pour analyser l'utilisation de la méthode Where dans les collections Laravel. 1. Créer une collection Tout d'abord, nous devons créer une collection contenant des données. Peut

Laravel est un framework PHP populaire et sa classe Collections fournit de puissantes fonctions de traitement de données. Parmi elles, la méthode Where est l'une des méthodes couramment utilisées dans les classes de collection, utilisée pour filtrer les données qui remplissent les conditions. Cet article présentera en détail la méthode Where de la collection Laravel, y compris les méthodes d'utilisation, la signification des paramètres et des exemples de code spécifiques. 1. Présentation de la méthode Where La méthode Where est utilisée pour filtrer les éléments de la collection qui répondent à des conditions spécifiées et renvoient un

Clause SQLWHERE La clause WHERE permet de préciser les critères de sélection. Pour sélectionner conditionnellement des données dans une table, ajoutez une clause WHERE à l'instruction SELECT. La syntaxe est la suivante : SELECT nom de colonne FROM nom de table WHERE valeur de l'opérateur de colonne Les opérateurs suivants peuvent être utilisés dans la clause WHERE : = : égal à : différent de > : supérieur à = : supérieur ou égal à 1965

Erreurs courantes et solutions pour la méthode Where dans Laravel Dans le processus de développement à l'aide du framework Laravel, nous utilisons souvent EloquentORM pour faire fonctionner la base de données. Parmi elles, la méthode Where est une méthode très couramment utilisée pour filtrer les données dans la base de données. Cependant, en raison du manque de familiarité avec le framework Laravel ou du manque de compréhension approfondie d'EloquentORM, il est facile de commettre des erreurs courantes lors de l'utilisation de la méthode Where. Cet article présentera plusieurs w courants
