0

昨晚我遇到了 mysql 的一个特殊问题。所以我有一个有四列的表( A text, B text, C text , D number)。我创建了 D 作为我的index( B-Tree Mysql Index with innodb engine).

假设在表中插入数据后:D的最大值为100,最小值为0;

在字段 D 上查询时:

  • where D = 25. 查询立即执行

  • where D = 125(即表中不存在值)。查询按年龄执行


据我了解,索引足够聪明,可以识别该值包含在表中,并且应该像其他值一样快速执行。我查看了解释查询计划,它显示对键“字段 D”进行了 50% 的表扫描。我不明白为什么要花这么多时间来执行第二个查询?

我的表大约有 2000 万行。
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 回答