From a741c37030f38c753a8c3f2b2e021088e83a9cb8 Mon Sep 17 00:00:00 2001 From: Bastien Penavayre Date: Mon, 29 Dec 2025 16:38:44 +0100 Subject: [PATCH] remove Query.exclude(:order_by) in exists? `select(1)` with `limit(1)` is sufficient for databases to optimize away the order_by. In some cases removing the `order_by` clause will change the query-plan leading to seq-scans instead of index usage. --- lib/ecto/repo/queryable.ex | 1 - test/ecto/repo_test.exs | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/ecto/repo/queryable.ex b/lib/ecto/repo/queryable.ex index a9fd650c1c..dc462a6a60 100644 --- a/lib/ecto/repo/queryable.ex +++ b/lib/ecto/repo/queryable.ex @@ -142,7 +142,6 @@ defmodule Ecto.Repo.Queryable do queryable = Query.exclude(queryable, :select) |> Query.exclude(:preload) - |> Query.exclude(:order_by) |> Query.exclude(:distinct) |> Query.select(1) |> Query.limit(1) diff --git a/test/ecto/repo_test.exs b/test/ecto/repo_test.exs index 805997ce6d..18b549ee47 100644 --- a/test/ecto/repo_test.exs +++ b/test/ecto/repo_test.exs @@ -543,12 +543,12 @@ defmodule Ecto.RepoTest do "#Ecto.Query" end - test "removes order by from query without distinct/limit/offset" do + test "keeps order by from query" do from(MySchema, order_by: :id) |> TestRepo.exists?() assert_received {:all, query} assert inspect(query) == - "#Ecto.Query" + "#Ecto.Query" end test "overrides any select" do