Skip to content

Commit

Permalink
*: bypass order by clause for fast point get plan (#50204) (#50364)
Browse files Browse the repository at this point in the history
close #49920
  • Loading branch information
ti-chi-bot authored Jan 24, 2024
1 parent 9fa98b3 commit 95464e7
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
4 changes: 3 additions & 1 deletion cmd/explaintest/r/explain_easy_stats.result
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ id estRows task access object operator info
Point_Get 1.00 root table:index_prune, index:PRIMARY(a, b)
explain format = 'brief' select * from index_prune WHERE a = 1010010404050976781 AND b = 26467085526790 GROUP BY b ORDER BY a limit 1;
id estRows task access object operator info
Point_Get 1.00 root table:index_prune, index:PRIMARY(a, b)
TopN 1.00 root test.index_prune.a, offset:0, count:1
└─StreamAgg 1.00 root group by:test.index_prune.b, funcs:firstrow(test.index_prune.a)->test.index_prune.a, funcs:firstrow(test.index_prune.b)->test.index_prune.b, funcs:firstrow(test.index_prune.c)->test.index_prune.c
└─Point_Get 1.00 root table:index_prune, index:PRIMARY(a, b)
drop table if exists t1, t2, t3, index_prune;
set @@session.tidb_opt_insubq_to_join_and_agg=1;
drop table if exists tbl;
Expand Down
8 changes: 8 additions & 0 deletions executor/executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4999,6 +4999,14 @@ func TestIsPointGet(t *testing.T) {
}
}

func TestPointGetOrderby(t *testing.T) {
store := testkit.CreateMockStore(t)
tk := testkit.NewTestKit(t, store)
tk.MustExec("use test")
tk.MustExec("create table t (i int key)")
require.Equal(t, tk.ExecToErr("select * from t where i = 1 order by j limit 10;").Error(), "[planner:1054]Unknown column 'j' in 'order clause'")
}

func TestClusteredIndexIsPointGet(t *testing.T) {
store := testkit.CreateMockStore(t)
tk := testkit.NewTestKit(t, store)
Expand Down
2 changes: 1 addition & 1 deletion planner/core/point_get_plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -1012,7 +1012,7 @@ func tryWhereIn2BatchPointGet(ctx sessionctx.Context, selStmt *ast.SelectStmt) *
// 3. All the columns must be public and not generated.
// 4. The condition is an access path that the range is a unique key.
func tryPointGetPlan(ctx sessionctx.Context, selStmt *ast.SelectStmt, check bool) *PointGetPlan {
if selStmt.Having != nil {
if selStmt.Having != nil || selStmt.OrderBy != nil {
return nil
} else if selStmt.Limit != nil {
count, offset, err := extractLimitCountOffset(ctx, selStmt.Limit)
Expand Down

0 comments on commit 95464e7

Please sign in to comment.