2016-05-30 3 views
0

HeidiSQLを使用していくつかのクエリのパフォーマンスを分析していますが、これに遭遇しました:EXPLAINコマンドによって返される行の量がテーブルに含まれる行と同じではありません。EXPLAIN、count(1)とテーブルの内容の間のMySQLクエリの不一致

クエリ:

  1. ダミーからの選択数(1)を説明。結果:

    • SELECT_TYPE:SIMPLE
    • テーブル:ダミー
    • タイプ:インデックス
    • キー:idxF2F3
    • key_lenに:10
    • 行:2183
    • 余分:インデックスを使用して
  2. EXPLAIN SELECT * FROM Dummy;結果:

    • SELECT_TYPE:SIMPLE
    • テーブル:ダミー
    • タイプ:ALL
    • 行:2183
  3. SELECT COUNT(1)ダミーFROM。結果:

  4. SELECT * FROM Dummy;結果:15列のテーブルX 2195行

は、私はまた、(F2およびF3)テーブルのキーのコマンド

select field1 count(\*) 
    from table\_name 
    group by field1 
    having count(\*) > 1 

を使用し、それがF3には、重複を与えません。 f2の場合、いくつかの行について115,53,565,82,35,37,314,196,41,118,76,29,158,68、および308の重複がありますが、ここでは何も間違いはありません。

CREATE TABLE Dummy(
`f1` INT(11) NULL DEFAULT NULL, 
`f2` INT(11) NULL DEFAULT NULL, 
`f3` INT(11) NULL DEFAULT NULL, 
`f4` VARCHAR(254) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', 
`f5` VARCHAR(254) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', 
`f6` VARCHAR(8) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', 
`f7` DATETIME NULL DEFAULT NULL, 
`f8` BIGINT(20) NULL DEFAULT NULL, 
`f9` BIGINT(20) NULL DEFAULT NULL, 
`f10` DATETIME NULL DEFAULT NULL, 
`f11` DATETIME NULL DEFAULT NULL, 
`f12` BIGINT(20) NULL DEFAULT NULL, 
`f13` DOUBLE NULL DEFAULT NULL, 
`f14` INT(11) NULL DEFAULT NULL, 
`f15` INT(11) NULL DEFAULT NULL 
INDEX `idxF2F3` (`f2`, `f3`) 
) 
COLLATE='utf8_unicode_ci' 
ENGINE=InnoDB 
; 

すべてのヘルプ:

表はこれで定義されていますか?私は類似の質問を検索しました。

答えて

0

EXPLAIN操作では、クエリプランナのロジックの一部が表示されます。クエリプランナは、テーブル統計を使用して、生データ自体ではなく、クエリをどのように満たすかを把握します。

テーブルの統計情報は、特にアクティブなデータベースまたは最近変更されたデータベースの場合は古い場合があります。

ANALYZE TABLEコマンドで統計情報を最新の状態に戻すことができます。あなたのケースでは、あなたの統計に最新のカウントを取得するには、このコマンド

 ANALYZE TABLE Dummy; 

を発行します。

Proのヒント:テーブルデータの大量一括アップロード後、またはTRUNCATE TABLE操作の直後など、このような小さな不一致は心配しないでください。

+0

あなたのお返事ありがとうございます@ ollie-jones!統計を更新した後、EXPLAINコマンドは2205行を戻します。私はこれがテーブルの_number行_と_key \ _len_の合計の結果であると仮定して正しいですか? –

関連する問題