pt-table-checksum doesn't use non-unique index with highest cardinality

Bug #1199591 reported by Daniel Nichter on 2013-07-10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Toolkit moved to
Fix Released
Daniel Nichter
Fix Released
Daniel Nichter
Fix Released
Daniel Nichter

Bug Description

If there are only non-unique index, pt-table-checksum should choose the one with the highest cardinality, but it doesn't. In

   if ( !$best_index && @possible_indexes ) {
      PTDEBUG && _d('No PRIMARY or unique indexes;',
         'will use index with highest cardinality');
      foreach my $index ( @possible_indexes ) {
         $indexes->{$index}->{cardinality} = _get_index_cardinality(
            index => $index,
      @possible_indexes = sort {
         # Prefer the index with the highest cardinality.
         my $cmp
            = $indexes->{$b}->{cardinality} <=> $indexes->{$b}->{cardinality};
         if ( $cmp == 0 ) {
            # Indexes have the same cardinality; prefer the one with
            # more columns.
            $cmp = scalar @{$indexes->{$b}->{cols}}
               <=> scalar @{$indexes->{$a}->{cols}};
      } @possible_indexes;
      $best_index = $possible_indexes[0];

We need to test that block.

Related branches

Changed in percona-toolkit:
assignee: nobody → Daniel Nichter (daniel-nichter)
Daniel Nichter (daniel-nichter) wrote :

Simple fix, can you spot it? :

         my $cmp
            = $indexes->{$b}->{cardinality} <=> $indexes->{$b}->{cardinality};

If not, see the branches.

Percona now uses JIRA for bug reports so this bug report is migrated to:

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers