我正在使用 Postgres,我看到在两列上使用 order by 时,与仅在列上使用 order by 相比,我的查询慢了几个数量级。我在考虑的表中有大约 2950 万行。
以下是三个不同查询的结果:
仅按 id 排序:
EXPLAIN ANALYZE SELECT "api_meterdata"."id", "api_meterdata"."meter_id", "api_meterdata"."datetime", "api_meter"."id" FROM "api_meterdata" INNER JOIN "api_meter" ON ( "api_meterdata"."meter_id" = "api_meter"."id" ) ORDER BY "api_meterdata"."id" DESC LIMIT 100;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.44..321.49 rows=100 width=20) (actual time=0.407..30.424 rows=100 loops=1)
-> Nested Loop (cost=0.44..94824299.30 rows=29535145 width=20) (actual time=0.402..30.090 rows=100 loops=1)
Join Filter: (api_meterdata.meter_id = api_meter.id)
Rows Removed by Join Filter: 8147
-> Index Scan Backward using api_meterdata_pkey on api_meterdata (cost=0.44..58053041.74 rows=29535145 …
Run Code Online (Sandbox Code Playgroud)