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