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)就不行了。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Laravel コレクションの Where メソッドに関する実践ガイド Laravel フレームワークの開発中、コレクションは、データを操作するための豊富なメソッドを提供する非常に便利なデータ構造です。中でも、Where メソッドは、指定した条件に基づいてコレクション内の要素をフィルタリングできる、一般的に使用されるフィルタリング メソッドです。この記事では、Laravel コレクションでの Where メソッドの使用法を紹介し、特定のコード例を通じてその使用法を示します。 1. Whereメソッドの基本的な使い方

Laravel コレクションで Where メソッドを使用する方法 Laravel は、開発者がアプリケーションを迅速に構築できるようにする豊富な機能とツールを提供する人気のある PHP フレームワークです。その中でも、コレクションは Laravel の非常に実用的で強力なデータ構造であり、開発者はコレクションを使用して、フィルタリング、マッピング、並べ替えなどのデータに対するさまざまな操作を実行できます。コレクションでは、Where メソッドは、指定された条件に基づいてコレクションをフィルター処理するためによく使用される方法です。

初心者から上級者まで: is および where セレクターの使用スキルをマスターする はじめに: データの処理と分析のプロセスにおいて、セレクターは非常に重要なツールです。セレクターを使用すると、特定の条件に従ってデータセットから必要なデータを抽出できます。この記事では、読者がこれら 2 つのセレクターの強力な機能をすぐに習得できるように、is および where セレクターの使用スキルを紹介します。 1. is セレクターの使用 is セレクターは、与えられた条件に基づいてデータセットを選択できるようにする基本的なセレクターです。

はじめに SQL ステートメントを作成する場合、内部接続や外部接続などの接続キーワードの使用を避けることはできません。多くのタイプがあります。他の場所で見つけた画像をここに掲載します。この画像は非常に詳細だと思います。SQL ステートメントの一般的なリンク タイプを示しています。この記事の leftjoin を例として取り上げます。オンラインで入手できます。定義されているとおり: LEFTJOIN キーワードは、右側のテーブルに一致する行がない場合でも、左側のテーブルのすべての行を返します。実際、左結合は文字どおり比較的理解しやすいのですが、on以降とwhere以降では結果が全く異なるなど、使用上の問題点もいくつかあります。

Laravel は豊富で便利な機能を提供する人気の PHP 開発フレームワークであり、コレクションは Laravel の非常に重要なデータ構造の 1 つです。コレクション クラスには多くの強力なメソッドが用意されており、その 1 つが where メソッドです。この記事では、特定のコード例を使用して、Laravel コレクションでの where メソッドの使用法を分析します。 1. コレクションを作成する まず、いくつかのデータを含むコレクションを作成する必要があります。できる

Laravel は人気のある PHP フレームワークであり、その Collections クラスは強力なデータ処理機能を提供します。このうち、Where メソッドはコレクション クラスでよく使用されるメソッドの 1 つで、条件を満たすデータをフィルターするために使用されます。この記事では、LaravelコレクションのWhereメソッドについて、使い方やパラメータの意味、具体的なコード例などを詳しく紹介します。 1. Where メソッドの概要 Where メソッドは、指定された条件を満たすコレクション内の要素をフィルターし、

SQLWHERE 句 WHERE 句は、選択基準を指定するために使用されます。テーブルから条件付きでデータを選択するには、SELECT ステートメントに WHERE 句を追加します。構文は次のとおりです。 SELECT 列名 FROM テーブル名 WHERE 列演算子の値 WHERE 句では次の演算子を使用できます。 =: 等しい: 等しくない >: より大きい =: 1965 より大きい

Laravel の where メソッドでよくあるエラーと解決策. Laravel フレームワークを使用した開発の過程では、EloquentORM を使用してデータベースを操作することがよくあります。その中でも、where メソッドは、データベース内のデータをフィルタリングするために非常によく使用されるメソッドです。ただし、Laravel フレームワークに精通していないか、EloquentORM についての深い理解が不足しているため、where メソッドを使用するときにいくつかのよくある間違いを犯しやすくなります。この記事では、いくつかの一般的な W を紹介します。
