SELECT id FROM foo.bar LIMIT 10OFFSET0 +-----+ | id | +-----+ |109| |13| |14| |15| |128| |129| |130| |190| |226| |227| +-----+
发现虽然用主键去查,但结果没有按照主键排序。
查询*试试
SELECT*FROM foo.bar LIMIT 10OFFSET0 +----+-------+---+ | id | a | b | +----+-------+---+ |1|24274|0| |2|24274|0| |3|24274|0| |4|24274|0| |5|24274|0| |6|24274|0| |7|24274|0| |8|24274|0| |9|24274|0| |10|24274|0| +----+-------+---+
排序按照主键。 查看执行计划,结果如下:
EXPLAIN SELECT*FROM foo.bar LIMIT 10OFFSET0 \G ***************************[ 1.row ]*************************** id |1 select_type | SIMPLE table| bar partitions |<null> type |ALL possible_keys |<null> key |<null> key_len |<null> ref|<null> rows|211 filtered |100.0 Extra |<null>
发现select * 没走索引,使用了全表扫描,因此顺序为主键顺序。
EXPLAIN SELECT id FROM foo.bar LIMIT 10OFFSET0 \G ***************************[ 1.row ]*************************** id |1 select_type | SIMPLE table| bar partitions |<null> type | index possible_keys |<null> key | idx_a key_len |8 ref|<null> rows|211 filtered |100.0 Extra |Using index
SELECT id FROM foo.bar FORCE INDEX(PRI) LIMIT 10OFFSET0 +----+ | id | +----+ |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| +----+
强制使用主键索引,果然没问题了。 或者使用order by id引导查询优化器使用主键索引也可以:
explain SELECT id FROM boss_business.boss_block_refund_order orderby id LIMIT 10OFFSET0 \G ***************************[ 1.row ]*************************** id |1 select_type | SIMPLE table| boss_block_refund_order partitions |<null> type | index possible_keys |<null> key |PRIMARY key_len |8 ref|<null> rows|10 filtered |100.0 Extra |Using index