有关查询的问题,如从a中选择最大值(B),其中A = 123

时间:2011-04-07 08:22:40

标签: mysql select indexing

我想知道MySQL将如何处理该声明?如果列A,B都被索引。

我想有两种方法可以做。

  1. 一个。从A == 123中选择所有记录作为临时结果 湾从临时结果中找到最大B一并返回。 时间复杂度可能是O(lgN + m)。

  2. 一步获取记录,换句话说,T(N)= O(lgN)?

  3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

我的直觉告诉我,除非B可以为空并且B稀疏地填充(真正稀疏,低至1%或更低以及编号小于每个索引键A的平均值数的10%),以降序检查B 然后检查这些记录上的A = 123是值得的,MySql在此查询中不会有B的索引条。

很可能它只会使用A(如果A足够有选择性),从表中检索记录,按B降序排序并返回结果。

这意味着你的第一个案例,O(N + m)。 N与表格大小成正比,这也是统计上平均有多少记录满足A = {any x}