0

昨夜、mysql で奇妙な問題に直面しました。だから私は4つの列を持つテーブルを持っています( A text, B text, C text , D number)。D を my として作成しましたindex( B-Tree Mysql Index with innodb engine)

テーブルにデータを挿入した後、D の最大値は 100、最小値は 0 であるとします。

フィールド D のクエリ中:

  • where D = 25. クエリはすぐに実行されます

  • where D = 125(つまり、値がテーブルに存在しません)。クエリは年齢で実行されます


私が理解しているように、インデックス作成は、この値がテーブルに含まれていることを認識するのに十分スマートであり、他の値として非常に迅速に実行する必要があります。説明クエリ プランを調べたところ、キー「フィールド D」で 50% のテーブル スキャンが表示されました。2 番目のクエリの実行に時間がかかる理由がわかりません。

私のテーブルには約 2,000 万行あります。
PS: 説明のためだけに数字を使用しました。

ありがとうございました

4

1 に答える 1

0

not exists次のクエリのようなものを試してみてください。

SELECT  *
FROM    mytable a
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    mytable b
        WHERE   a.id = b.id
        AND b.id = 125
        );
于 2013-01-26T17:23:23.617 に答える