EXPLAIN ANALYZE: -> Limit: 10 row(s) (actual time=4757..4757 rows=10 loops=1) -> Sort: test_client.id, limit input to 10 row(s) per chunk (actual time=4757..4757 rows=10 loops=1) -> Stream results (cost=194554 rows=994944) (actual time=0.59..4241 rows=1e+6 loops=1) -> Left hash join (test_join2.client_id = test_client.id) (cost=194554 rows=994944) (actual time=0.574..1334 rows=1e+6 loops=1) -> Left hash join (test_join1.client_id = test_client.id) (cost=147022 rows=994944) (actual time=0.444..1240 rows=1e+6 loops=1) -> Table scan on test_client (cost=100801 rows=994944) (actual time=0.331..1118 rows=1e+6 loops=1) -> Hash -> Table scan on test_join1 (cost=0.0478 rows=1) (actual time=0.0984..0.0984 rows=0 loops=1) -> Hash -> Table scan on test_join2 (cost=0.0955 rows=1) (actual time=0.117..0.117 rows=0 loops=1) EXPLAIN: +--+-----------+-----------+----------+----+-------------+----+-------+----+------+--------+------------------------------------------+ |id|select_type|table |partitions|type|possible_keys|key |key_len|ref |rows |filtered|Extra | +--+-----------+-----------+----------+----+-------------+----+-------+----+------+--------+------------------------------------------+ |1 |SIMPLE |test_client|null |ALL |null |null|null |null|994944|100 |Using temporary; Using filesort | |1 |SIMPLE |test_join1 |null |ALL |client_id |null|null |null|1 |100 |Using where; Using join buffer (hash join)| |1 |SIMPLE |test_join2 |null |ALL |client_id |null|null |null|1 |100 |Using where; Using join buffer (hash join)| +--+-----------+-----------+----------+----+-------------+----+-------+----+------+--------+------------------------------------------+