如果值超出索引最大值,我的Sql查询会很慢

时间:2013-01-26 17:14:29

标签: mysql indexing

我昨晚遇到了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:我用数字号来解释。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以像not exists一样尝试以下查询吗?

SELECT  *
FROM    mytable a
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    mytable b
        WHERE   a.id = b.id
        AND b.id = 125
        );