Skip to content
CockroachDB - the open source, cloud-native SQL database.
Go TypeScript C++ Yacc Shell CSS Other
Branch: master
Clone or download
craig[bot] and andy-kimball Merge #43547
43547: opt: add exploration rules for min/max => limit 1 transform r=andy-kimball a=andy-kimball

Add new rules that work similarly to the existing ReplaceMaxWithLimit and
ReplaceMinWithLimit rules, except that they recognize the non-Scalar GroupBy
case. The new rules add an ordered LIMIT 1 to the input when it can be proven
that there is at most one group, and there exists a single min/max aggregate
function operating on that group. In that case, the GROUP BY can be entirely
replaced by a PROJECT, similar to this:

  SELECT min(k) FROM kw WHERE w = 5 GROUP BY w
  SELECT k FROM kw@w WHERE w = 5

Note that the Max and Min versions of this rule are not fully symmetric.
This is because NULL values sort first in CRDB. This can interfere with the
calculation of the Min function, because NULL values need to be ignored unless
the group contains only NULL values (in which case the function returns NULL).
Therefore, this rule only works when the MIN column is NOT NULL, as only in
that case is one input row always sufficient to calculate MIN.

Release note (sql change): Add optimization to scan over only 1 row when
finding the MIN/MAX of a single aggregate group, as long as the correct
index is present.

Co-authored-by: Andrew Kimball <>
Latest commit 3bb1834 Jan 19, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github CODEOWNERS: (re-)register cli-prs for pkg/cli Aug 27, 2019
build build: create full human-readable output on test failure Jan 15, 2020
c-deps roachpb: rename NoRefreshSpans -> CanCommitAtHigherTimestamp Jan 15, 2020
cloud cloud: bump version to 19.2.2 Dec 16, 2019
docs sql: enable setting a password for the root user Jan 18, 2020
githooks githooks: accept release note category 'security update' Jan 15, 2020
licenses licenses: Update BSL change date for master/20.1 Nov 7, 2019
monitoring monitoring: add expiration alerts for optional certificates. Aug 13, 2018
pkg opt: add exploration rules for min/max => limit 1 transform Jan 19, 2020
scripts release notes: new section "security updates" Jan 10, 2020
vendor @ aa4046d vendor: update crlfmt dependency Jan 16, 2020
.editorconfig editorconfig: Use tabs for Makefile indentation Mar 5, 2019
.gitattributes sql: clean up the `array` logic test Mar 13, 2019
.gitignore cmd/fuzz: add new fuzz command Aug 20, 2019
.gitmodules Revert "Revert "deps: configure and build patched libedit"" Jun 25, 2019
AUTHORS Add myself (Owen) to AUTHORS Jan 6, 2020 githooks: enhance the commit message recommendations Oct 18, 2019
Gopkg.lock vendor: update crlfmt dependency Jan 16, 2020
Gopkg.toml cli,deps: bump tablewriter and fix misc SQL table rendering bugs Jan 5, 2020
LICENSE licenses: Add BSL.txt Jun 4, 2019
Makefile colexec: remove zerocolumns template Jan 13, 2020 docs: move the contribution guide to the external wiki Oct 11, 2019


CockroachDB is a cloud-native SQL database for building global, scalable cloud services that survive disasters.

TeamCity CI GoDoc

What is CockroachDB?

CockroachDB is a distributed SQL database built on a transactional and strongly-consistent key-value store. It scales horizontally; survives disk, machine, rack, and even datacenter failures with minimal latency disruption and no manual intervention; supports strongly-consistent ACID transactions; and provides a familiar SQL API for structuring, manipulating, and querying data.

For more details, see our FAQ or architecture document.

Here’s a quick explainer video:


For guidance on installation, development, deployment, and administration, see our User Documentation.


  1. Install CockroachDB.

  2. Start a local cluster and talk to it via the built-in SQL client.

  3. Learn more about CockroachDB SQL.

  4. Use a PostgreSQL-compatible driver or ORM to build an app with CockroachDB.

  5. Explore core features, such as data replication, automatic rebalancing, and fault tolerance and recovery.

Client Drivers

CockroachDB supports the PostgreSQL wire protocol, so you can use any available PostgreSQL client drivers to connect from various languages.


  • Test Deployment - Easiest way to test an insecure, multi-node CockroachDB cluster.
  • Production Deployments
    • Manual - Steps to deploy a CockroachDB cluster manually on multiple machines.
    • Cloud - Guides for deploying CockroachDB on various cloud platforms.
    • Orchestration - Guides for running CockroachDB with popular open-source orchestration systems.

Need Help?


We're an open source project and welcome contributions. See our Contributor Wiki for more details.

Engineering discussion takes place on our public mailing list,


For an in-depth discussion of the CockroachDB architecture, see our Architecture Guide.

For the original design motivation, see our design doc.

Comparison with Other Databases

To see how key features of CockroachDB stack up against other databases, visit the CockroachDB in Comparison page on our website.

See Also

You can’t perform that action at this time.