尝试消除重复时全表扫描

时间:2016-07-13 18:24:32

标签: mysql sql indexing

此子查询是更大查询的一部分:

(SELECT MAX(id) AS max_id,
    mi_id,
    m_id
  FROM members  USE INDEX (idx_member)
  WHERE 
  (1=1 )
  GROUP BY   mi_id,
    m_id
  )

这样做的原因是消除重复行并获取最大值。

然而,在大约100 K行中,我只有30-40行是重复的,但这是强制全表扫描。索引在m_id上。

如何在不使用MAX /聚合的情况下解决此问题?

1 个答案:

答案 0 :(得分:0)

SELECT id, mi_id, m_id
    FROM members
    ORDER BY mi_id DESC, m_id DESC, id DESC;

并且

INDEX(mi_id, m_id, id)