使用 @N=@N + 1 的经典技巧来获取某个有序列上项目的排名。现在在订购之前,我需要通过将基表与其他表进行内部连接来过滤掉基表中的一些值。所以查询看起来像这样-:
SET @N=0;
SELECT
@N := @N + 1 AS rank,
fa.id,
fa.val
FROM
table1 AS fa
INNER JOIN table2 AS em
ON em.id = fa.id
AND em.type = "A"
ORDER BY fa.val ;
问题是,如果我在 em.type 上没有索引,那么一切正常,但是如果我在 em.type 上放置索引,那么地狱就会释放,排名值而不是按 val 列的顺序排列行存储在 em 表中。
这是示例输出-:
没有索引-:
rank id val
1 05F8C7 55050.000000
2 05HJDG 51404.733458
3 05TK1Z 46972.008208
4 05F2TR 46900.000000
5 05F349 44433.412847
6 06C2BT 43750.000000
7 0012X3 42000.000000
8 05MMPK 39430.399658
9 05MLW5 39054.046383
10 062D20 35550.000000
带索引-:
rank id val
480 05F8C7 55050.000000
629 05HJDG 51404.733458
1603 05TK1Z 46972.008208
466 05F2TR 46900.000000
467 05F349 44433.412847
3534 06C2BT 43750.000000
15 0012X3 42000.000000
1109 05MMPK 39430.399658
1087 05MLW5 39054.046383
2544 062D20 35550.000000
我相信索引的使用应该是完全透明的,输出不应该受到它的影响。这是 MySQL 中的错误吗?