-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rowexec: paired joiners to accomplish left joins #54639
Conversation
There are probably bugs here since I have not written any tests (and I see the CI failed). Sent it out just for early comments. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't review the execution code in a lot of detail -- I'll leave that for @yuzefovich and @asubiotto. But the approach generally looks good to me. Mostly just left a lot of nits in the comments below.
Reviewed 5 of 5 files at r1.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @sumeerbhola, and @yuzefovich)
pkg/sql/execinfrapb/processors_sql.proto, line 202 at r1 (raw file):
// The first join in this pair of joins is unable to precisely evaluate the // join condition and produces false positives. This is typical when the first // join is a inverted join (see InvertedJoinerSpec), but can also be the case
[nit] a inverted -> an inverted
pkg/sql/execinfrapb/processors_sql.proto, line 227 at r1 (raw file):
// a1, b2, c1, null, false // when the first join is LEFT_OUTER // a2, b1, c1, d3, false // a2, b2, c1, d4, true
should this be b1
instead of b2
?
pkg/sql/execinfrapb/processors_sql.proto, line 234 at r1 (raw file):
// a1, b1, c1, d1, null, null // a1, b2, c1, null, null, null // a2, b2, c1, d4, d4, f1
ditto
pkg/sql/execinfrapb/processors_sql.proto, line 244 at r1 (raw file):
// // The output for LEFT_SEMI: // a1, b1, c1, d3
I think this should be a2, b1, c1, d4
pkg/sql/execinfrapb/processors_sql.proto, line 247 at r1 (raw file):
// Again, the d column will be projected away after the join. // // This special case is
This got cut off
pkg/sql/execinfrapb/processors_sql.proto, line 568 at r1 (raw file):
// Internal columns for LEFT_SEMI and LEFT_ANTI: | a | b | // // For a LEFT_OUTER with OutputGroupCountForLeftJoin = true, the internal
OutputGroupCountForLeftJoin -> OutputContinuationForLeftJoin
Also, doesn't have to be LEFT_OUTER, right? This could also be used with INNER.
pkg/sql/execinfrapb/processors_sql.proto, line 569 at r1 (raw file):
// // For a LEFT_OUTER with OutputGroupCountForLeftJoin = true, the internal // columns including an additional bool column as the last column.
including -> include?
pkg/sql/rowexec/inverted_joiner.go, line 145 at r1 (raw file):
outputContinuationCol bool trueEncDatum rowenc.EncDatum
[nit] Seems a bit odd to have these as data members. Why not just define a global instance within the file var trueEncDatum = rowenc.DatumToEncDatum(types.Bool, tree.DBoolTrue)
?
pkg/sql/rowexec/inverted_joiner.go, line 580 at r1 (raw file):
} if renderedRow != nil { firstRowForInputIdx := ij.emitCursor.seenMatch
[nit] I don't think this variable really makes it clearer what's going on. I would just use ij.emitCursor.seenMatch
below.
pkg/sql/rowexec/inverted_joiner.go, line 604 at r1 (raw file):
} // renderUnmatchedRow creates a result row given an unmatched row.
[nit] update comment to indicate that the result is stored in ij.combinedRow
pkg/sql/rowexec/joinreader.go, line 50 at r1 (raw file):
// jrEmittingRows means we are emitting the results of the index lookup. jrEmittingRows // jrReadyToDrain means we are done but have not yet started draining
[nit] missing period
pkg/sql/rowexec/joinreader.go, line 111 at r1 (raw file):
// are together implementing left {outer,semi,anti} joins where the // first join produces false positives because it cannot evaluate // the whole expression (or evaluate it accurately, as in sometimes
as in -> as is
pkg/sql/rowexec/joinreader.go, line 113 at r1 (raw file):
// the whole expression (or evaluate it accurately, as in sometimes // the case with inverted indexes). The first join is running a // left outer join, and each group of rows seen by the second join
could also be inner
pkg/sql/rowexec/joinreader_strategies.go, line 249 at r1 (raw file):
// join, this will emit a row that includes a possibly non-nil value in // the lookup columns, which will differ for different rows in a group. // These will need to be projected away.
Is this comment supposed to apply to the optimizer? If so, maybe add a TODO.
pkg/sql/rowexec/joinreader_strategies.go, line 286 at r1 (raw file):
// row that includes a possibly non-nil value in the lookup columns, // which will differ for different rows in a group. These will need to // be projected away.
ditto
pkg/sql/rowexec/joinreader_strategies.go, line 519 at r1 (raw file):
// join, this will emit a row that includes a possibly non-nil value in // the lookup columns, which will differ for different rows in a group. // These will need to be projected away.
ditto
fa8e177
to
3287d1f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TFTR!
I've addressed the comments.
I will try to refactor the joinReader code to make these changes look less like two different code paths.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @rytaft, and @yuzefovich)
pkg/sql/execinfrapb/processors_sql.proto, line 202 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] a inverted -> an inverted
Done.
pkg/sql/execinfrapb/processors_sql.proto, line 227 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
should this be
b1
instead ofb2
?
Yes, should be b1. Fixed
pkg/sql/execinfrapb/processors_sql.proto, line 234 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
ditto
Done
pkg/sql/execinfrapb/processors_sql.proto, line 244 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
I think this should be
a2, b1, c1, d4
Yep -- fixed.
pkg/sql/execinfrapb/processors_sql.proto, line 247 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
This got cut off
Forgot to delete. Removed.
pkg/sql/execinfrapb/processors_sql.proto, line 568 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
OutputGroupCountForLeftJoin -> OutputContinuationForLeftJoin
Also, doesn't have to be LEFT_OUTER, right? This could also be used with INNER.
I forgot a number of places to update the count to continuation change, and the expansion to INNER joins.
Done.
pkg/sql/execinfrapb/processors_sql.proto, line 569 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
including -> include?
Done.
pkg/sql/rowexec/inverted_joiner.go, line 145 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] Seems a bit odd to have these as data members. Why not just define a global instance within the file
var trueEncDatum = rowenc.DatumToEncDatum(types.Bool, tree.DBoolTrue)
?
Done.
pkg/sql/rowexec/inverted_joiner.go, line 580 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] I don't think this variable really makes it clearer what's going on. I would just use
ij.emitCursor.seenMatch
below.
Done.
pkg/sql/rowexec/inverted_joiner.go, line 604 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] update comment to indicate that the result is stored in
ij.combinedRow
Done.
pkg/sql/rowexec/joinreader.go, line 50 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] missing period
Done.
pkg/sql/rowexec/joinreader.go, line 111 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
as in -> as is
Done.
pkg/sql/rowexec/joinreader.go, line 113 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
could also be inner
Done.
pkg/sql/rowexec/joinreader_strategies.go, line 249 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
Is this comment supposed to apply to the optimizer? If so, maybe add a TODO.
Correct. Done.
pkg/sql/rowexec/joinreader_strategies.go, line 286 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
ditto
Done.
pkg/sql/rowexec/joinreader_strategies.go, line 519 at r1 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
ditto
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Reviewed 5 of 5 files at r2.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @yuzefovich)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall, the code looks good to me, but it would definitely benefit from some unification and hiding of the complexity, so I'm +1 on "make these changes look less like two different code paths".
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @sumeerbhola)
pkg/sql/execinfrapb/processors_sql.proto, line 209 at r1 (raw file):
// lookup columns. The first join additionally adds a continuation column that // demarcates a group of successive rows that correspond to an original left // row. The first row in a group contains false (since it is not a
nit: not sure how important this is, but in the vectorized ordered aggregation we have true
marking the beginning of a new group and false
marking a continuation of the group, so it might be worth switching true
and false
as well as the naming from "continuation" to "new_group" (or something like that) here to be similar.
pkg/sql/rowexec/joinreader.go, line 122 at r1 (raw file):
// in the pair. // The current batch of input rows belong to groups which are
nit: s/belong/belongs/
.
pkg/sql/rowexec/joinreader.go, line 127 at r1 (raw file):
// don't know if it was the last row in a group until we get // to the next batch. groupingState *inputBatchGroupingState
nit: I'd define a utility struct for these fields, something like
secondJoinUtil struct {
groupingState ...
...
}
I find that such a way hides the complexity a bit better.
pkg/sql/rowexec/joinreader.go, line 469 at r1 (raw file):
) { if jr.groupingState != nil { if !jr.groupStateReset {
nit: I'd switch the meaning of jr.groupStateReset
so that when it is true
, then we need to reset (maybe I'd rename the variable slightly as well). I think it reads more natural and we're avoiding a reset at the very beginning (when no rows have been read).
pkg/sql/rowexec/joinreader.go, line 475 at r1 (raw file):
jr.groupStateReset = true } // Else, returning meta interrupted reading the input batch, so already
nit: I think s/so already/so we already/
- something seems to be missing.
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
} jr.curBatchSizeBytes += int64(row.Size()) if jr.groupingState != nil {
I wonder whether it is possible to refactor these changes to hide the complexity behind some interface. I think you mentioned in a comment that you'll work on that - that'd be great.
pkg/sql/rowexec/joinreader.go, line 500 at r2 (raw file):
jr.groupingState.addContinuationValForRow(continuationVal) if len(jr.scratchInputRows) == 0 && continuationVal { // First row in batch is a continuation of last group
nit: missing period.
pkg/sql/rowexec/joinreader.go, line 791 at r2 (raw file):
func (ib *inputBatchGroupingState) addContinuationValForRow(cont bool) { if len(ib.groupMatched) == 0 || !cont {
This condition seems a bit suspicious to me, could you add some comments explaining what this method achieves?
pkg/sql/rowexec/joinreader_strategies.go, line 201 at r2 (raw file):
s.scratchMatchingInputRowIndices = s.scratchMatchingInputRowIndices[:0] for _, inputRowIdx := range matchingInputRowIndices { if (s.groupingState == nil && !s.matched[inputRowIdx]) ||
I think it'd be nice to unify the two conditions somehow into one - like we would have a "matching" strategy or something that would behave differently when we have the continuation values.
pkg/sql/rowexec/joinreader_strategies.go, line 232 at r2 (raw file):
s.emitState.unmatchedInputRowIndices = s.emitState.unmatchedInputRowIndices[:0] for inputRowIdx, m := range s.matched { if (s.groupingState == nil && !m) || s.groupingState.isUnmatched(inputRowIdx) {
ditto for some unification
pkg/sql/rowexec/joinreader_strategies.go, line 260 at r2 (raw file):
s.emitState.matchingInputRowIndicesCursor++ inputRow := s.inputRows[inputRowIdx] if s.groupingState != nil && s.joinType == descpb.LeftSemiJoin && s.groupingState.getMatched(inputRowIdx) {
nit: it deserves a quick comment.
3287d1f
to
8af9a51
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TFTR!
Addressed (most) comments and did refactoring to unify the grouping and non-grouping code paths.
I'll come back later to the comment on whether it should be a continuation or new group bool. And I'll work on adding tests.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @rytaft, @sumeerbhola, and @yuzefovich)
pkg/sql/rowexec/joinreader.go, line 122 at r1 (raw file):
Previously, yuzefovich wrote…
nit:
s/belong/belongs/
.
I switched the noun order since the sentence is really about "The input rows ... belong to groups ...".
pkg/sql/rowexec/joinreader.go, line 127 at r1 (raw file):
Previously, yuzefovich wrote…
nit: I'd define a utility struct for these fields, something like
secondJoinUtil struct { groupingState ... ... }
I find that such a way hides the complexity a bit better.
I've moved the last
prefixed fields into lastBatchState
. groupingState
is now used for all lookup joins so I've left it at the top-level.
pkg/sql/rowexec/joinreader.go, line 469 at r1 (raw file):
Previously, yuzefovich wrote…
nit: I'd switch the meaning of
jr.groupStateReset
so that when it istrue
, then we need to reset (maybe I'd rename the variable slightly as well). I think it reads more natural and we're avoiding a reset at the very beginning (when no rows have been read).
Done
pkg/sql/rowexec/joinreader.go, line 475 at r1 (raw file):
Previously, yuzefovich wrote…
nit: I think
s/so already/so we already/
- something seems to be missing.
Done
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
Previously, yuzefovich wrote…
I wonder whether it is possible to refactor these changes to hide the complexity behind some interface. I think you mentioned in a comment that you'll work on that - that'd be great.
I've tried to manage the groupingState
initialization complexity by putting some of it in methods on inputBatchGroupingState
. I'd like to note that all the initialization happens in this method so its not spread in various places (if that helps).
The comment I'd said earlier was mainly about different code paths in the strategies implementation -- the matching state was being kept in 2 different ways. That's been simplified by using inputBatchGroupingState
for matching information whether or not grouping is being done.
pkg/sql/rowexec/joinreader.go, line 500 at r2 (raw file):
Previously, yuzefovich wrote…
nit: missing period.
Done
pkg/sql/rowexec/joinreader.go, line 791 at r2 (raw file):
Previously, yuzefovich wrote…
This condition seems a bit suspicious to me, could you add some comments explaining what this method achieves?
I've added a comment. Note that if cont
is true for the first row in a batch, we still need to place an entry for group num 0 in these slices. The matching state of group num 0 will get updated later by calling setFirstGroupMatched
.
pkg/sql/rowexec/joinreader_strategies.go, line 201 at r2 (raw file):
Previously, yuzefovich wrote…
I think it'd be nice to unify the two conditions somehow into one - like we would have a "matching" strategy or something that would behave differently when we have the continuation values.
Ack. The matched
field is no more.
pkg/sql/rowexec/joinreader_strategies.go, line 232 at r2 (raw file):
Previously, yuzefovich wrote…
ditto for some unification
Done
pkg/sql/rowexec/joinreader_strategies.go, line 260 at r2 (raw file):
Previously, yuzefovich wrote…
nit: it deserves a quick comment.
Done
2a575a2
to
104d174
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added tests.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @rytaft, @sumeerbhola, and @yuzefovich)
104d174
to
c2a81f5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 7 of 7 files at r3.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @sumeerbhola)
pkg/sql/execinfrapb/processors_sql.proto, line 209 at r1 (raw file):
Previously, yuzefovich wrote…
nit: not sure how important this is, but in the vectorized ordered aggregation we have
true
marking the beginning of a new group andfalse
marking a continuation of the group, so it might be worth switchingtrue
andfalse
as well as the naming from "continuation" to "new_group" (or something like that) here to be similar.
Actually, I don't think it's too important to unify this with the vectorized engine, up to you.
pkg/sql/execinfrapb/processors_sql.proto, line 620 at r3 (raw file):
// indicates whether a row is a continuation of a group corresponding to a // left row. optional bool output_group_continuation_for_left_row = 8 [(gogoproto.nullable) = false];
I'm assuming that this won't be backported, right?
We should bump the distsql version in pkg/sql/execinfra/version.go
.
pkg/sql/rowexec/inverted_joiner.go, line 643 at r3 (raw file):
func (ij *invertedJoiner) renderUnmatchedRow(row rowenc.EncDatumRow) { ij.combinedRow = append(ij.combinedRow[:0], row...) rowLen := cap(ij.combinedRow)
Why are we using cap
here and not len
?
pkg/sql/rowexec/inverted_joiner.go, line 645 at r3 (raw file):
rowLen := cap(ij.combinedRow) if ij.outputContinuationCol { rowLen--
nit: I'd remove rowLen
entirely and move the slicing operation into the if
, i.e.
ij.combinedRow = append(ij.combinedRow[:0], row...)
if ij.outputContinuationCol {
ij.combinedRow = ij.combinedRow[:len(row)-1]
}
pkg/sql/rowexec/inverted_joiner_test.go, line 269 at r3 (raw file):
outputColumns: []uint32{0, 1}, expected: "[[5 5] [5 50] [20 2] [20 20] [42 24] [42 42]]", outputColumnsWithContinuation: []uint32{0, 1, 4},
nit: looks like we can remove outputColumnsWithContinuation
since we can deduce its contents based on outputColumns
and outputTypes
. The fact whether expectedWithContinuation
is empty or not could indicate whether we want to test the continuation case.
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
Previously, sumeerbhola wrote…
I've tried to manage the
groupingState
initialization complexity by putting some of it in methods oninputBatchGroupingState
. I'd like to note that all the initialization happens in this method so its not spread in various places (if that helps).The comment I'd said earlier was mainly about different code paths in the strategies implementation -- the matching state was being kept in 2 different ways. That's been simplified by using
inputBatchGroupingState
for matching information whether or not grouping is being done.
Hm, I think I'd like to see the opposite - having several new methods on groupingState
like processingContinuation
and finishNewBatch
or alike which would contain the new code additions.
As it is written currently, readInput
contains a lot of code that is not relevant to the majority of the use cases of the join reader, so I'd like to hide that code if possible.
I wonder what @asubiotto thinks about it.
pkg/sql/rowexec/joinreader_test.go, line 467 at r3 (raw file):
}, { description: "Test paired join with outer join with group spanning batches",
How do we know a group is spanning multiple batches? Do we have a constant 10 used somewhere?
c2a81f5
to
cbdadf2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @yuzefovich)
pkg/sql/execinfrapb/processors_sql.proto, line 209 at r1 (raw file):
Previously, yuzefovich wrote…
Actually, I don't think it's too important to unify this with the vectorized engine, up to you.
Then I'll leave it unchanged.
pkg/sql/execinfrapb/processors_sql.proto, line 620 at r3 (raw file):
Previously, yuzefovich wrote…
I'm assuming that this won't be backported, right?
We should bump the distsql version in
pkg/sql/execinfra/version.go
.
Yes, won't be backported. I've bumped both Version
and MinAcceptedVersion
though I'm murky on how this versioning works:
- These paired joiners won't be used until we add optimizer support for them. Will I need to do anything with versions when adding that code, or just the version compatibility check in
FlowVerIsCompatible
will take care of the right thing? - If
FlowVerIsCompatible
indicates that the node is on an older version, will the query fail? What prevents the optimizer from constructing such a join before all nodes are on the version that can handle it? - Perhaps I shouldn't be bumping up
MinAcceptedVersion
-- a node that understands this paired joiner stuff can also accept queries from nodes that don't.
Feel free to direct me to some doc that I can read to answer these questions.
pkg/sql/rowexec/inverted_joiner.go, line 643 at r3 (raw file):
Previously, yuzefovich wrote…
Why are we using
cap
here and notlen
?
row
is just the left side. The right side needs to be added and set to NULL. I've added some code comments.
pkg/sql/rowexec/inverted_joiner.go, line 645 at r3 (raw file):
Previously, yuzefovich wrote…
nit: I'd remove
rowLen
entirely and move the slicing operation into theif
, i.e.ij.combinedRow = append(ij.combinedRow[:0], row...) if ij.outputContinuationCol { ij.combinedRow = ij.combinedRow[:len(row)-1] }
See previous comment.
pkg/sql/rowexec/inverted_joiner_test.go, line 269 at r3 (raw file):
Previously, yuzefovich wrote…
nit: looks like we can remove
outputColumnsWithContinuation
since we can deduce its contents based onoutputColumns
andoutputTypes
. The fact whetherexpectedWithContinuation
is empty or not could indicate whether we want to test the continuation case.
Yes, with these test cases it is always column 4 that is the continuation column. Done.
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
Previously, yuzefovich wrote…
Hm, I think I'd like to see the opposite - having several new methods on
groupingState
likeprocessingContinuation
andfinishNewBatch
or alike which would contain the new code additions.As it is written currently,
readInput
contains a lot of code that is not relevant to the majority of the use cases of the join reader, so I'd like to hide that code if possible.I wonder what @asubiotto thinks about it.
I didn't enhance groupingState
, since we need to update groupingState
(which is used by the strategies) and lastBatchState
. Instead, I added some helper methods on joinReader
and call those instead.
I'm not sure this actually improves readability -- personally I find separating into different functions useful when there is a clean data-structure or algorithmic separation. Here we have to make a bunch of state transitions during initialization that need to occur in a certain order and often being able to read the code in sequence without having to jump around to other functions is easier.
Let me know if you have a better abstraction boundary.
pkg/sql/rowexec/joinreader_test.go, line 467 at r3 (raw file):
Previously, yuzefovich wrote…
How do we know a group is spanning multiple batches? Do we have a constant 10 used somewhere?
It is because we do SetBatchSizeBytes(int64(encRows[0].Size() * 2))
below. I've added a comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 7 files at r3, 5 of 5 files at r4.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @sumeerbhola, and @yuzefovich)
pkg/sql/rowexec/inverted_joiner_test.go, line 240 at r4 (raw file):
outputTypes []*types.T // The output columns for the case without continuation. The test adds // column 4 for the case with continuation.
is it always column 4? this comment seems like it will quickly become stale
pkg/sql/rowexec/inverted_joiner_test.go, line 496 at r4 (raw file):
post := c.post if outputGroupContinuation { post.OutputColumns = append(c.outputColumns, 4)
[nit] add a comment to explain why it's column 4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 4 of 5 files at r4.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @sumeerbhola)
pkg/sql/execinfra/version.go, line 46 at r4 (raw file):
// MinAcceptedVersion is the oldest version that the server is compatible with. // A server will not accept flows with older versions. const MinAcceptedVersion execinfrapb.DistSQLVersion = 38
As discussed below, no need to bump MinAcceptedVersion
.
pkg/sql/execinfrapb/processors_sql.proto, line 620 at r3 (raw file):
Previously, sumeerbhola wrote…
Yes, won't be backported. I've bumped both
Version
andMinAcceptedVersion
though I'm murky on how this versioning works:
- These paired joiners won't be used until we add optimizer support for them. Will I need to do anything with versions when adding that code, or just the version compatibility check in
FlowVerIsCompatible
will take care of the right thing?- If
FlowVerIsCompatible
indicates that the node is on an older version, will the query fail? What prevents the optimizer from constructing such a join before all nodes are on the version that can handle it?- Perhaps I shouldn't be bumping up
MinAcceptedVersion
-- a node that understands this paired joiner stuff can also accept queries from nodes that don't.Feel free to direct me to some doc that I can read to answer these questions.
- The fact the optimizer doesn't support these paired joiners yet is somewhat irrelevant - we have added a new behavior to "DistSQL server", so we should update it's version.
- No, the query will not fail; instead, the gateway will not schedule any work on the nodes with newer versions. There is no protection about the optimizer versioning, but the assumption is that on the gateway node if the optimizer constructs a paired joiner, then the gateway is capable of executing it whereas some of the remote nodes might not support it yet - in that case, those remote nodes will not have anything scheduled on them.
- Yeah, bumping
MinAcceptedVersion
is not necessary because this change is backwards-compatible (if we have a gateway with old version, then it doesn't know about paired joiners, so it will not try to use such machinery, and - I believe - the remote node with the new version will do exactly what the gateway expects.
pkg/sql/rowexec/inverted_joiner.go, line 643 at r3 (raw file):
Previously, sumeerbhola wrote…
row
is just the left side. The right side needs to be added and set to NULL. I've added some code comments.
Ok, makes sense, but I still think it's a bit confusing. How about we move the logic of this part
if ij.outputContinuationCol {
ij.combinedRow = append(ij.combinedRow, falseEncDatum)
}
into this method? I.e.:
ij.combinedRow = ij.combinedRow[:cap(ij.combinedRow)]
copy(ij.combinedRow, row)
for i := len(row); i < len(ij.combinedRow); i++ {
ij.combinedRow[i].Datum = tree.DNull
}
if ij.outputContinuationCol {
ij.combinedRow[len(ij.combinedRow)-1] = falseEncDatum
}
I think this way all the logic for "rendering an unmatched row" is truly in renderUnmatchedRow
method.
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
Previously, sumeerbhola wrote…
I didn't enhance
groupingState
, since we need to updategroupingState
(which is used by the strategies) andlastBatchState
. Instead, I added some helper methods onjoinReader
and call those instead.
I'm not sure this actually improves readability -- personally I find separating into different functions useful when there is a clean data-structure or algorithmic separation. Here we have to make a bunch of state transitions during initialization that need to occur in a certain order and often being able to read the code in sequence without having to jump around to other functions is easier.
Let me know if you have a better abstraction boundary.
I don't have a good suggestion for some abstractions, but I think I prefer the current code layout since those methods are pretty much no-ops for the common case (of regular lookup/index joins), so the complexity of the paired joiner case is moved out of the view. Let's see what @asubiotto thinks as the deciding vote :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, it'd be nice to run the micro benchmarks to make sure that non-paired joiner case doesn't regress.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto and @sumeerbhola)
cbdadf2
to
76e08ce
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @asubiotto, @rytaft, and @yuzefovich)
pkg/sql/execinfra/version.go, line 46 at r4 (raw file):
Previously, yuzefovich wrote…
As discussed below, no need to bump
MinAcceptedVersion
.
Done.
pkg/sql/execinfrapb/processors_sql.proto, line 620 at r3 (raw file):
Previously, yuzefovich wrote…
- The fact the optimizer doesn't support these paired joiners yet is somewhat irrelevant - we have added a new behavior to "DistSQL server", so we should update it's version.
- No, the query will not fail; instead, the gateway will not schedule any work on the nodes with newer versions. There is no protection about the optimizer versioning, but the assumption is that on the gateway node if the optimizer constructs a paired joiner, then the gateway is capable of executing it whereas some of the remote nodes might not support it yet - in that case, those remote nodes will not have anything scheduled on them.
- Yeah, bumping
MinAcceptedVersion
is not necessary because this change is backwards-compatible (if we have a gateway with old version, then it doesn't know about paired joiners, so it will not try to use such machinery, and - I believe - the remote node with the new version will do exactly what the gateway expects.
Got it. Thanks.
pkg/sql/rowexec/inverted_joiner.go, line 643 at r3 (raw file):
Previously, yuzefovich wrote…
Ok, makes sense, but I still think it's a bit confusing. How about we move the logic of this part
if ij.outputContinuationCol { ij.combinedRow = append(ij.combinedRow, falseEncDatum) }
into this method? I.e.:
ij.combinedRow = ij.combinedRow[:cap(ij.combinedRow)] copy(ij.combinedRow, row) for i := len(row); i < len(ij.combinedRow); i++ { ij.combinedRow[i].Datum = tree.DNull } if ij.outputContinuationCol { ij.combinedRow[len(ij.combinedRow)-1] = falseEncDatum }
I think this way all the logic for "rendering an unmatched row" is truly in
renderUnmatchedRow
method.
Yes, that is better. Done.
pkg/sql/rowexec/inverted_joiner_test.go, line 240 at r4 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
is it always column 4? this comment seems like it will quickly become stale
I've adjusted the comment to not say the column number.
pkg/sql/rowexec/inverted_joiner_test.go, line 496 at r4 (raw file):
Previously, rytaft (Rebecca Taft) wrote…
[nit] add a comment to explain why it's column 4
Done.
pkg/sql/rowexec/joinreader.go, line 491 at r2 (raw file):
Previously, yuzefovich wrote…
I don't have a good suggestion for some abstractions, but I think I prefer the current code layout since those methods are pretty much no-ops for the common case (of regular lookup/index joins), so the complexity of the paired joiner case is moved out of the view. Let's see what @asubiotto thinks as the deciding vote :)
Ack.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
once you address @yuzefovich's comments
Reviewed 3 of 3 files at r5.
Reviewable status: complete! 1 of 0 LGTMs obtained (waiting on @asubiotto and @yuzefovich)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if the benchmarks don't show a regression in performance in non-paired case.
Reviewable status: complete! 2 of 0 LGTMs obtained (waiting on @asubiotto)
76e08ce
to
ecabd05
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, it'd be nice to run the micro benchmarks to make sure that non-paired joiner case doesn't regress.
I am running these and trying to see if the difference is noise or something real.
Reviewable status: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @asubiotto)
The paired joiners are used to accomplish left {outer,semi,anti} joins when the first joiner will produce false positives (as known to the optimizer). Currently, only the invertedJoiner can function as this first joiner but there is wording in the spec describing how this could also be useful for join expressions that can't be fully evaluated on one non-inverted index. The first joiner outputs an additional bool column representing a continuation value. This is used to demarcate groups of consecutive rows output by the first joiner that represent the same original left row. The first joiner needs to preserve input row order (the invertedJoiner always does this). The second joiner is a lookup join and handles these groups in a special manner. The second join does not need to be order preserving. Informs cockroachdb#53576 Prior to this, the way to do: - a left outer join with an inverted join is to do an inner join with the same ON condition, which is a pair of inverted join and lookup join, and then wrap the expression in another left join with the original left side. - a left anti join with an inverted join is to map it to a left outer join (previous bullet). - a left semi join is to map it to an inner join with the same ON condition, which is a pair of inverted join and lookup join, and then project, sort (or make the lookup join order preserving) and dedup. We expect that the alternative outlined in this PR (it excludes the optimizer changes) will be more efficient since it is simply a pairing of inverted joiner and lookup join (and the latter does not need to be order preserving). Release note: None
ecabd05
to
74f83be
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yuzefovich I've made some changes to shave off some allocations that were showing up in profiles.
There isn't a regression (see full diff below: old is master and new is this PR), and I did look at mem profiles for the small mem diffs below but there isn't really anything in the profiles corresponding to the new path so I think the diffs there are just noise.
name old time/op new time/op delta
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB/parallel=true-16 46.2µs ± 8% 40.8µs ± 0% -11.52% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB-16 45.0µs ± 5% 42.0µs ± 2% -6.75% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 44.8µs ± 4% 42.6µs ±12% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited-16 44.1µs ± 2% 40.9µs ± 1% -7.29% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=100KB-16 125µs ± 3% 114µs ± 1% -8.85% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=unlimited-16 125µs ± 1% 114µs ± 3% -8.58% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=100KB-16 1.41ms ± 2% 1.28ms ± 2% -9.40% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=unlimited-16 1.40ms ± 1% 1.28ms ± 1% -8.21% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=100KB-16 5.60ms ± 3% 5.13ms ± 3% -8.47% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 5.65ms ± 5% 5.12ms ± 3% -9.39% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=100KB-16 22.1ms ± 2% 19.9ms ± 2% -10.00% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 22.3ms ± 2% 19.8ms ± 2% -11.33% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=100KB-16 44.8ms ± 3% 40.9ms ±11% -8.63% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 44.5ms ± 3% 40.7ms ± 2% -8.53% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=100KB-16 80.8ms ± 3% 72.0ms ± 4% -10.95% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 81.2ms ± 5% 71.1ms ± 1% -12.38% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=100KB-16 160ms ± 2% 153ms ± 6% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 162ms ± 5% 149ms ±11% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=100KB-16 324ms ± 4% 290ms ± 4% -10.61% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 327ms ± 6% 289ms ± 3% -11.47% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=100KB-16 2.58s ± 4% 2.28s ± 2% -11.78% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 2.57s ± 1% 2.29s ± 1% -10.94% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB/parallel=true-16 45.0µs ± 2% 42.6µs ± 2% -5.38% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB-16 45.1µs ± 1% 42.5µs ± 2% -5.74% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 45.7µs ± 2% 42.9µs ± 3% -6.04% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited-16 45.3µs ± 1% 44.1µs ± 4% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=100KB-16 148µs ± 1% 152µs ± 4% ~ (p=0.190 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=unlimited-16 157µs ± 5% 147µs ± 8% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=100KB-16 1.81ms ± 4% 1.76ms ± 4% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=unlimited-16 1.81ms ± 3% 1.74ms ± 4% -4.33% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=100KB-16 7.04ms ± 2% 6.88ms ± 3% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 7.09ms ± 4% 6.77ms ± 1% -4.41% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=100KB-16 27.8ms ± 2% 27.6ms ± 4% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 27.8ms ± 3% 26.8ms ± 3% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=100KB-16 58.3ms ±16% 54.5ms ± 2% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 56.3ms ± 2% 54.8ms ± 5% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=100KB-16 113ms ± 2% 105ms ± 2% -7.24% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 110ms ± 3% 111ms ± 5% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=100KB-16 219ms ± 3% 221ms ± 3% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 222ms ± 3% 216ms ± 6% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=100KB-16 444ms ± 2% 430ms ± 4% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 442ms ± 3% 431ms ± 3% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB/parallel=true-16 56.0µs ± 7% 51.0µs ± 6% -9.01% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB-16 54.2µs ± 6% 50.1µs ± 2% -7.45% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 53.9µs ± 3% 50.7µs ± 4% -6.08% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 55.3µs ± 6% 50.2µs ± 4% -9.16% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=100KB-16 284µs ±10% 256µs ± 2% -10.01% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 268µs ± 3% 258µs ± 3% -3.63% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=100KB-16 7.79ms ± 6% 7.40ms ± 2% -5.07% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 3.55ms ± 2% 3.45ms ± 2% -2.69% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=100KB-16 31.2ms ±11% 29.2ms ± 1% -6.61% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 14.0ms ± 3% 13.9ms ± 2% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=100KB-16 120ms ± 4% 116ms ± 2% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 59.6ms ± 5% 54.3ms ± 2% -8.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=100KB-16 242ms ± 5% 234ms ± 2% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 111ms ± 1% 110ms ± 3% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=100KB-16 479ms ± 2% 464ms ± 1% -3.17% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 225ms ± 2% 214ms ± 2% -4.65% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=100KB-16 1.04s ±12% 0.94s ± 2% -10.15% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 451ms ± 3% 434ms ± 2% -3.75% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB/parallel=true-16 62.6µs ± 6% 58.5µs ± 1% -6.63% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB-16 61.0µs ± 3% 60.8µs ±12% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 65.5µs ± 5% 58.5µs ± 2% -10.65% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 66.2µs ±13% 59.4µs ± 2% -10.33% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=100KB-16 427µs ± 1% 410µs ± 2% -4.00% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 432µs ± 5% 401µs ± 2% -7.01% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=100KB-16 13.5ms ± 2% 13.3ms ± 2% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 5.90ms ± 3% 5.75ms ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=100KB-16 54.5ms ± 4% 52.3ms ± 3% -3.99% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 23.6ms ± 6% 22.8ms ± 2% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=100KB-16 212ms ± 2% 211ms ± 1% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 92.7ms ± 6% 90.0ms ± 2% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=100KB-16 425ms ± 2% 417ms ± 1% -1.93% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 186ms ± 1% 183ms ± 4% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=100KB-16 857ms ± 1% 838ms ± 1% -2.20% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 381ms ±11% 360ms ± 2% -5.66% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB/parallel=true-16 78.8µs ± 3% 75.5µs ± 1% -4.20% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB-16 78.9µs ± 2% 75.9µs ± 1% -3.84% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 78.8µs ± 3% 75.3µs ± 1% -4.51% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 78.4µs ± 2% 75.7µs ± 2% -3.50% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=100KB-16 1.83ms ± 2% 1.81ms ± 2% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 705µs ± 3% 692µs ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=100KB-16 25.8ms ± 3% 25.0ms ± 1% -3.07% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 10.5ms ± 4% 10.2ms ± 1% -2.39% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=100KB-16 102ms ± 1% 99ms ± 1% -3.03% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 41.6ms ± 3% 41.0ms ± 2% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=100KB-16 401ms ± 2% 393ms ± 1% -1.81% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 168ms ± 2% 160ms ± 2% -4.34% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=100KB-16 802ms ± 1% 789ms ± 1% -1.59% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 331ms ± 3% 320ms ± 3% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 39.1µs ± 2% 35.8µs ± 2% -8.55% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited-16 39.5µs ± 2% 36.1µs ± 3% -8.57% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16/mem=unlimited-16 110µs ± 2% 103µs ± 2% -6.66% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=256/mem=unlimited-16 1.23ms ± 2% 1.12ms ± 5% -9.09% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 5.02ms ± 1% 4.37ms ± 3% -12.92% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 20.0ms ± 1% 18.1ms ± 5% -9.16% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 40.6ms ± 2% 37.2ms ± 4% -8.30% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 89.5ms ± 2% 85.1ms ± 2% -4.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 192ms ± 3% 179ms ± 6% -6.61% (p=0.032 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 381ms ± 2% 357ms ± 4% -6.27% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 3.28s ± 5% 2.92s ± 2% -10.96% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 42.6µs ±10% 40.2µs ± 4% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited-16 41.0µs ± 4% 38.6µs ± 2% -5.88% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16/mem=unlimited-16 134µs ± 3% 127µs ± 2% -4.96% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=256/mem=unlimited-16 1.56ms ± 3% 1.51ms ± 1% -3.28% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 6.23ms ± 2% 6.12ms ± 4% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 28.0ms ± 3% 28.5ms ± 8% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 63.7ms ± 3% 63.8ms ± 3% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 168ms ± 2% 162ms ± 2% -3.52% (p=0.032 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 384ms ± 4% 377ms ± 5% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 786ms ± 1% 793ms ± 3% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 46.0µs ± 5% 44.2µs ± 2% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 44.7µs ± 3% 42.6µs ± 3% -4.59% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 200µs ± 1% 199µs ± 2% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 2.79ms ±14% 2.67ms ± 2% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 11.6ms ± 7% 11.3ms ± 1% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 59.2ms ± 4% 58.9ms ± 2% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 154ms ± 4% 151ms ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 467ms ± 5% 451ms ± 4% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 1.03s ± 2% 1.12s ± 3% +8.05% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 52.0µs ± 7% 50.9µs ± 2% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 51.0µs ± 3% 48.8µs ± 1% -4.41% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 306µs ± 6% 295µs ± 2% -3.79% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 4.20ms ± 2% 4.17ms ± 3% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 18.9ms ± 3% 18.5ms ± 2% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 104ms ± 4% 100ms ± 4% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 281ms ± 4% 281ms ± 3% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 867ms ± 1% 851ms ± 1% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 62.5µs ± 1% 61.0µs ± 2% -2.44% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 61.8µs ± 3% 59.7µs ± 5% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 472µs ± 4% 476µs ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 7.19ms ± 2% 7.19ms ± 4% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 32.7ms ± 3% 32.0ms ± 3% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 183ms ± 2% 182ms ± 4% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 517ms ± 3% 519ms ± 5% ~ (p=1.000 n=5+5)
name old speed new speed delta
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB/parallel=true-16 346kB/s ± 8% 390kB/s ± 0% +12.72% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB-16 354kB/s ± 4% 382kB/s ± 3% +7.91% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 356kB/s ± 4% 378kB/s ±10% ~ (p=0.127 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited-16 364kB/s ± 2% 390kB/s ± 0% +7.14% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=100KB-16 2.05MB/s ± 3% 2.25MB/s ± 1% +9.76% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=unlimited-16 2.05MB/s ± 1% 2.24MB/s ± 3% +9.37% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=100KB-16 2.91MB/s ± 2% 3.21MB/s ± 2% +10.32% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=unlimited-16 2.93MB/s ± 1% 3.19MB/s ± 1% +9.01% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=100KB-16 2.92MB/s ± 3% 3.19MB/s ± 3% +9.23% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 2.90MB/s ± 5% 3.20MB/s ± 3% +10.34% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=100KB-16 2.97MB/s ± 2% 3.29MB/s ± 2% +10.99% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 2.94MB/s ± 2% 3.31MB/s ± 2% +12.65% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=100KB-16 2.93MB/s ± 3% 3.21MB/s ±10% +9.77% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 2.95MB/s ± 3% 3.22MB/s ± 2% +9.37% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=100KB-16 3.24MB/s ± 3% 3.64MB/s ± 4% +12.27% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 3.23MB/s ± 5% 3.68MB/s ± 1% +13.99% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=100KB-16 3.28MB/s ± 2% 3.43MB/s ± 6% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 3.24MB/s ± 5% 3.53MB/s ±11% ~ (p=0.079 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=100KB-16 3.24MB/s ± 4% 3.62MB/s ± 4% +11.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 3.22MB/s ± 6% 3.63MB/s ± 3% +12.75% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=100KB-16 3.25MB/s ± 4% 3.68MB/s ± 2% +13.29% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 3.26MB/s ± 1% 3.66MB/s ± 1% +12.25% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB/parallel=true-16 890kB/s ± 2% 940kB/s ± 2% +5.62% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB-16 890kB/s ± 1% 942kB/s ± 1% +5.84% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 878kB/s ± 2% 934kB/s ± 3% +6.38% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited-16 884kB/s ± 2% 908kB/s ± 4% ~ (p=0.206 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=100KB-16 4.32MB/s ± 1% 4.20MB/s ± 4% ~ (p=0.159 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=unlimited-16 4.09MB/s ± 5% 4.38MB/s ± 7% +7.10% (p=0.048 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=100KB-16 5.66MB/s ± 4% 5.82MB/s ± 4% ~ (p=0.087 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=unlimited-16 5.65MB/s ± 3% 5.90MB/s ± 4% +4.46% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=100KB-16 5.82MB/s ± 2% 5.96MB/s ± 3% ~ (p=0.135 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 5.79MB/s ± 4% 6.05MB/s ± 1% +4.53% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=100KB-16 5.89MB/s ± 2% 5.94MB/s ± 4% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 5.89MB/s ± 4% 6.11MB/s ± 3% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=100KB-16 5.65MB/s ±14% 6.02MB/s ± 2% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 5.83MB/s ± 2% 5.99MB/s ± 5% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=100KB-16 5.79MB/s ± 2% 6.24MB/s ± 2% +7.84% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 5.96MB/s ± 3% 5.89MB/s ± 5% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=100KB-16 6.00MB/s ± 3% 5.95MB/s ± 3% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 5.90MB/s ± 3% 6.07MB/s ± 6% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=100KB-16 5.90MB/s ± 2% 6.10MB/s ± 4% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 5.93MB/s ± 3% 6.09MB/s ± 3% ~ (p=0.135 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB/parallel=true-16 2.43MB/s ± 7% 2.67MB/s ± 5% +9.70% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB-16 2.51MB/s ± 6% 2.71MB/s ± 2% +7.96% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 2.52MB/s ± 3% 2.69MB/s ± 4% +6.50% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 2.46MB/s ± 6% 2.71MB/s ± 3% +9.98% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=100KB-16 7.69MB/s ± 9% 8.52MB/s ± 2% +10.71% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 8.14MB/s ± 3% 8.44MB/s ± 3% +3.79% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=100KB-16 4.47MB/s ± 6% 4.71MB/s ± 2% +5.23% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 9.81MB/s ± 2% 10.08MB/s ± 2% +2.77% (p=0.024 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=100KB-16 4.48MB/s ±11% 4.78MB/s ± 1% +6.70% (p=0.040 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 9.93MB/s ± 4% 10.01MB/s ± 2% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=100KB-16 4.63MB/s ± 4% 4.78MB/s ± 2% +3.37% (p=0.040 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 9.35MB/s ± 5% 10.26MB/s ± 1% +9.69% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=100KB-16 4.61MB/s ± 5% 4.77MB/s ± 2% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 10.0MB/s ± 1% 10.1MB/s ± 3% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=100KB-16 4.66MB/s ± 2% 4.81MB/s ± 1% +3.22% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 9.91MB/s ± 2% 10.40MB/s ± 2% +4.88% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=100KB-16 4.31MB/s ±12% 4.76MB/s ± 2% +10.43% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 9.88MB/s ± 3% 10.26MB/s ± 2% +3.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB/parallel=true-16 4.22MB/s ± 5% 4.51MB/s ± 1% +7.02% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB-16 4.33MB/s ± 3% 4.36MB/s ±11% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 4.04MB/s ± 5% 4.51MB/s ± 2% +11.74% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 4.01MB/s ±12% 4.44MB/s ± 2% +10.66% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=100KB-16 9.90MB/s ± 1% 10.32MB/s ± 2% +4.18% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 9.80MB/s ± 4% 10.52MB/s ± 2% +7.43% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=100KB-16 5.00MB/s ± 2% 5.07MB/s ± 2% ~ (p=0.198 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 11.5MB/s ± 3% 11.8MB/s ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=100KB-16 4.97MB/s ± 4% 5.17MB/s ± 3% +4.11% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 11.4MB/s ± 6% 11.8MB/s ± 2% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=100KB-16 5.09MB/s ± 2% 5.14MB/s ± 1% ~ (p=0.460 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 11.7MB/s ± 6% 12.0MB/s ± 2% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=100KB-16 5.09MB/s ± 2% 5.19MB/s ± 1% +1.96% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 11.6MB/s ± 1% 11.8MB/s ± 4% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=100KB-16 5.05MB/s ± 1% 5.16MB/s ± 1% +2.26% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 11.4MB/s ±10% 12.0MB/s ± 2% +5.73% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB/parallel=true-16 6.60MB/s ± 3% 6.89MB/s ± 1% +4.33% (p=0.016 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB-16 6.59MB/s ± 2% 6.85MB/s ± 1% +3.97% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 6.60MB/s ± 3% 6.91MB/s ± 1% +4.70% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 6.63MB/s ± 2% 6.87MB/s ± 2% +3.62% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=100KB-16 4.54MB/s ± 2% 4.61MB/s ± 2% ~ (p=0.230 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 11.8MB/s ± 3% 12.0MB/s ± 2% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=100KB-16 5.15MB/s ± 3% 5.31MB/s ± 0% +3.10% (p=0.040 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 12.7MB/s ± 3% 13.0MB/s ± 1% +2.41% (p=0.040 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=100KB-16 5.23MB/s ± 2% 5.39MB/s ± 1% +3.10% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 12.8MB/s ± 3% 13.0MB/s ± 2% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=100KB-16 5.32MB/s ± 2% 5.41MB/s ± 1% +1.81% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 12.7MB/s ± 2% 13.3MB/s ± 2% +4.52% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=100KB-16 5.31MB/s ± 2% 5.40MB/s ± 1% +1.66% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 12.9MB/s ± 3% 13.3MB/s ± 3% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 408kB/s ± 3% 446kB/s ± 1% +9.31% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited-16 406kB/s ± 1% 442kB/s ± 3% +8.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16/mem=unlimited-16 2.33MB/s ± 2% 2.50MB/s ± 2% +7.12% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=256/mem=unlimited-16 3.32MB/s ± 2% 3.66MB/s ± 5% +10.05% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 3.27MB/s ± 1% 3.75MB/s ± 3% +14.88% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 3.28MB/s ± 1% 3.62MB/s ± 5% +10.11% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 3.23MB/s ± 2% 3.52MB/s ± 4% +9.03% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 2.92MB/s ± 0% 3.08MB/s ± 2% +5.64% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 2.73MB/s ± 3% 2.93MB/s ± 6% +7.10% (p=0.032 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 2.75MB/s ± 2% 2.94MB/s ± 4% +6.76% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 2.56MB/s ± 5% 2.87MB/s ± 2% +12.35% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 942kB/s ±10% 996kB/s ± 5% ~ (p=0.190 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited-16 976kB/s ± 3% 1036kB/s ± 3% +6.15% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16/mem=unlimited-16 4.79MB/s ± 3% 5.04MB/s ± 2% +5.22% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=256/mem=unlimited-16 6.58MB/s ± 3% 6.80MB/s ± 1% +3.34% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 6.58MB/s ± 2% 6.69MB/s ± 4% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 5.85MB/s ± 3% 5.77MB/s ± 9% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 5.15MB/s ± 3% 5.13MB/s ± 3% ~ (p=0.810 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 3.90MB/s ± 2% 4.04MB/s ± 2% +3.64% (p=0.032 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 3.42MB/s ± 4% 3.48MB/s ± 5% ~ (p=0.413 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 3.33MB/s ± 1% 3.30MB/s ± 3% ~ (p=0.175 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 2.96MB/s ± 5% 3.08MB/s ± 2% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 3.04MB/s ± 3% 3.19MB/s ± 3% +4.86% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 10.9MB/s ± 1% 11.0MB/s ± 2% ~ (p=0.254 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 12.5MB/s ±12% 13.0MB/s ± 2% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 12.0MB/s ± 6% 12.3MB/s ± 1% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 9.41MB/s ± 5% 9.47MB/s ± 2% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 7.26MB/s ± 3% 7.36MB/s ± 3% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 4.77MB/s ± 5% 4.94MB/s ± 4% ~ (p=0.135 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 4.32MB/s ± 2% 3.99MB/s ± 3% -7.50% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 5.08MB/s ± 7% 5.18MB/s ± 2% ~ (p=0.643 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 5.18MB/s ± 3% 5.41MB/s ± 1% +4.56% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 13.8MB/s ± 6% 14.3MB/s ± 2% +3.87% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 16.1MB/s ± 2% 16.2MB/s ± 3% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 14.3MB/s ± 3% 14.6MB/s ± 2% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 10.4MB/s ± 4% 10.7MB/s ± 1% ~ (p=0.524 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 7.71MB/s ± 4% 7.71MB/s ± 3% ~ (p=0.968 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 4.99MB/s ± 1% 5.09MB/s ± 1% ~ (p=0.063 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 8.32MB/s ± 1% 8.53MB/s ± 2% +2.50% (p=0.016 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 8.41MB/s ± 3% 8.72MB/s ± 5% ~ (p=0.079 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 17.6MB/s ± 4% 17.5MB/s ± 3% ~ (p=0.341 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 18.5MB/s ± 2% 18.5MB/s ± 4% ~ (p=0.587 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 16.3MB/s ± 3% 16.6MB/s ± 3% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 11.6MB/s ± 2% 11.7MB/s ± 4% ~ (p=0.786 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 8.25MB/s ± 3% 8.22MB/s ± 5% ~ (p=0.881 n=5+5)
name old alloc/op new alloc/op delta
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB/parallel=true-16 25.5kB ± 1% 25.6kB ± 1% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB-16 25.4kB ± 0% 26.0kB ± 7% +2.38% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 25.4kB ± 0% 25.5kB ± 0% +0.30% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited-16 25.4kB ± 0% 25.5kB ± 0% +0.31% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=100KB-16 39.7kB ± 0% 40.2kB ± 0% +1.39% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=unlimited-16 39.7kB ± 0% 40.2kB ± 0% +1.35% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=100KB-16 259kB ± 0% 264kB ± 0% +1.76% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=unlimited-16 260kB ± 0% 264kB ± 0% +1.38% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=100KB-16 830kB ± 0% 841kB ± 3% +1.28% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 844kB ± 3% 834kB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=100KB-16 3.11MB ± 0% 3.49MB ±30% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 3.11MB ± 0% 3.11MB ± 0% ~ (p=0.686 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=100KB-16 6.16MB ± 0% 6.16MB ± 0% ~ (p=0.730 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 6.17MB ± 0% 6.16MB ± 0% ~ (p=0.556 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=100KB-16 12.3MB ± 3% 12.2MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 12.3MB ± 3% 12.2MB ± 0% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=100KB-16 24.6MB ± 2% 25.9MB ± 6% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 24.5MB ± 1% 25.0MB ± 6% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=100KB-16 49.1MB ± 3% 48.8MB ± 0% ~ (p=0.556 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 51.3MB ± 8% 48.9MB ± 1% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=100KB-16 392MB ± 1% 391MB ± 2% ~ (p=0.421 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 391MB ± 1% 389MB ± 0% ~ (p=0.286 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB/parallel=true-16 25.6kB ± 0% 25.7kB ± 0% ~ (p=0.095 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB-16 25.6kB ± 0% 25.7kB ± 0% +0.31% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 25.6kB ± 0% 25.8kB ± 2% +0.78% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited-16 25.6kB ± 0% 25.7kB ± 0% +0.27% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=100KB-16 44.0kB ± 0% 45.7kB ± 3% +3.93% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=unlimited-16 45.5kB ± 4% 44.6kB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=100KB-16 361kB ± 0% 367kB ± 2% +1.69% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=unlimited-16 361kB ± 0% 364kB ± 0% +1.02% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=100KB-16 1.11MB ± 2% 1.11MB ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 1.10MB ± 0% 1.11MB ± 0% +0.51% (p=0.032 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=100KB-16 4.11MB ± 3% 4.12MB ± 4% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 4.08MB ± 0% 4.07MB ± 0% ~ (p=0.686 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=100KB-16 8.04MB ± 0% 8.04MB ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 8.09MB ± 3% 8.04MB ± 0% ~ (p=0.413 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=100KB-16 16.0MB ± 1% 16.0MB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 16.0MB ± 0% 16.1MB ± 4% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=100KB-16 32.0MB ± 1% 31.9MB ± 1% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 32.0MB ± 3% 31.8MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=100KB-16 63.6MB ± 1% 63.5MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 64.1MB ± 2% 64.2MB ± 3% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB/parallel=true-16 26.8kB ± 0% 27.2kB ± 2% +1.55% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB-16 26.8kB ± 0% 26.9kB ± 0% ~ (p=0.175 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 26.9kB ± 1% 26.9kB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 26.8kB ± 0% 26.9kB ± 0% +0.26% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=100KB-16 82.8kB ± 0% 83.2kB ± 0% +0.45% (p=0.032 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 83.0kB ± 1% 83.2kB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=100KB-16 1.62MB ± 6% 1.58MB ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 817kB ± 1% 817kB ± 0% ~ (p=0.286 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=100KB-16 5.50MB ± 1% 5.50MB ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 2.37MB ± 0% 2.39MB ± 3% ~ (p=0.190 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=100KB-16 21.4MB ± 2% 21.4MB ± 3% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 8.60MB ± 0% 8.60MB ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=100KB-16 42.3MB ± 1% 42.2MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 16.9MB ± 0% 17.1MB ± 3% ~ (p=0.190 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=100KB-16 85.3MB ± 2% 85.2MB ± 1% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 33.6MB ± 1% 33.9MB ± 4% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=100KB-16 171MB ± 1% 170MB ± 0% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 66.7MB ± 0% 66.8MB ± 0% ~ (p=0.486 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB/parallel=true-16 28.6kB ± 1% 28.6kB ± 0% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB-16 28.5kB ± 0% 28.6kB ± 0% +0.26% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 28.5kB ± 0% 28.6kB ± 0% +0.28% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 28.6kB ± 0% 28.6kB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=100KB-16 135kB ± 0% 136kB ± 0% +0.43% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 137kB ± 2% 136kB ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=100KB-16 2.79MB ± 0% 2.83MB ± 3% +1.42% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 1.43MB ± 2% 1.43MB ± 0% ~ (p=0.286 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=100KB-16 9.81MB ± 0% 9.80MB ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 4.14MB ± 2% 4.12MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=100KB-16 38.1MB ± 2% 37.9MB ± 0% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 14.9MB ± 0% 14.9MB ± 1% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=100KB-16 75.2MB ± 0% 75.4MB ± 1% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 29.3MB ± 1% 29.2MB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=100KB-16 152MB ± 1% 152MB ± 2% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 58.4MB ± 3% 57.9MB ± 0% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB/parallel=true-16 31.8kB ± 1% 31.7kB ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB-16 31.6kB ± 0% 31.7kB ± 0% +0.35% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 31.7kB ± 1% 31.7kB ± 0% ~ (p=0.135 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 31.6kB ± 0% 31.7kB ± 0% +0.37% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=100KB-16 469kB ± 2% 467kB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 234kB ± 0% 235kB ± 0% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=100KB-16 5.21MB ± 2% 5.21MB ± 2% ~ (p=0.548 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 2.62MB ± 0% 2.62MB ± 0% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=100KB-16 18.3MB ± 3% 18.2MB ± 0% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 7.28MB ± 0% 7.29MB ± 0% ~ (p=0.114 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=100KB-16 70.5MB ± 2% 70.1MB ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 26.1MB ± 2% 25.9MB ± 0% ~ (p=0.413 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=100KB-16 140MB ± 1% 139MB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 50.8MB ± 0% 50.8MB ± 0% ~ (p=0.556 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 16.7kB ± 1% 16.7kB ± 0% ~ (p=0.286 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited-16 16.7kB ± 1% 16.8kB ± 1% ~ (p=0.095 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16/mem=unlimited-16 30.4kB ± 1% 30.9kB ± 0% ~ (p=0.159 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=256/mem=unlimited-16 279kB ± 0% 287kB ± 0% +2.86% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 1.06MB ± 0% 1.10MB ± 1% +3.19% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 4.85MB ± 0% 5.12MB ± 2% +5.52% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 10.0MB ± 0% 10.7MB ± 2% +6.68% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 23.4MB ± 0% 24.7MB ± 0% +5.80% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 47.3MB ± 3% 49.1MB ± 0% +3.78% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 81.7MB ± 0% 83.8MB ± 0% +2.63% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 592MB ± 1% 596MB ± 1% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 16.9kB ± 0% 16.9kB ± 0% +0.33% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited-16 16.8kB ± 0% 16.9kB ± 0% +0.45% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16/mem=unlimited-16 33.2kB ± 0% 33.7kB ± 0% +1.59% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=256/mem=unlimited-16 326kB ± 2% 332kB ± 0% +1.90% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 1.24MB ± 0% 1.28MB ± 0% +2.62% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 6.37MB ± 0% 6.62MB ± 0% +3.90% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 16.2MB ± 1% 16.7MB ± 0% +3.40% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 45.3MB ± 1% 46.5MB ± 0% +2.52% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 104MB ± 0% 106MB ± 0% +2.28% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 203MB ± 1% 206MB ± 0% +1.64% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 17.7kB ± 0% 17.8kB ± 1% +0.68% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 17.7kB ± 0% 17.8kB ± 0% +0.37% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 47.0kB ± 0% 47.6kB ± 0% +1.20% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 546kB ± 0% 553kB ± 0% +1.28% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 2.35MB ± 2% 2.39MB ± 3% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 14.8MB ± 1% 15.0MB ± 0% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 42.5MB ± 0% 43.1MB ± 0% +1.43% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 159MB ± 1% 138MB ± 1% -13.23% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 371MB ± 1% 343MB ± 0% -7.39% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 18.9kB ± 0% 19.1kB ± 1% +0.69% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 18.9kB ± 0% 19.0kB ± 0% +0.36% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 67.8kB ± 4% 67.1kB ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 857kB ± 0% 873kB ± 3% +1.77% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 4.01MB ± 0% 4.04MB ± 0% +0.83% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 26.4MB ± 2% 26.5MB ± 0% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 78.6MB ± 2% 78.9MB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 259MB ± 1% 260MB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 21.0kB ± 0% 21.1kB ± 0% +0.32% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 21.0kB ± 0% 21.2kB ± 1% +0.78% (p=0.032 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 99.4kB ± 0% 99.9kB ± 0% +0.57% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 1.44MB ± 0% 1.45MB ± 0% +0.59% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 7.00MB ± 2% 6.99MB ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 47.9MB ± 2% 48.0MB ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 147MB ± 0% 148MB ± 1% +0.85% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB/parallel=true-16 125 ± 0% 127 ± 0% +1.60% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=100KB-16 125 ± 0% 127 ± 1% +1.80% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 125 ± 0% 127 ± 0% +1.60% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1/mem=unlimited-16 125 ± 0% 127 ± 0% +1.60% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=100KB-16 273 ± 0% 279 ± 0% +2.20% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16/mem=unlimited-16 273 ± 0% 279 ± 0% +2.20% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=100KB-16 2.72k ± 0% 2.73k ± 0% +0.40% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=256/mem=unlimited-16 2.72k ± 0% 2.73k ± 0% +0.22% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=100KB-16 10.2k ± 0% 10.2k ± 0% ~ (p=0.343 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 10.2k ± 1% 10.2k ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=100KB-16 39.9k ± 0% 40.7k ± 6% ~ (p=0.444 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 40.0k ± 1% 39.9k ± 0% ~ (p=0.968 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=100KB-16 79.5k ± 0% 79.6k ± 0% ~ (p=0.413 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 79.6k ± 0% 79.7k ± 1% ~ (p=0.730 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=100KB-16 159k ± 1% 159k ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 159k ± 1% 159k ± 0% -0.23% (p=0.032 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=100KB-16 318k ± 0% 336k ± 6% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 318k ± 0% 318k ± 1% ~ (p=0.905 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=100KB-16 635k ± 0% 636k ± 1% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 667k ± 6% 635k ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=100KB-16 5.10M ± 1% 5.08M ± 0% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 5.07M ± 0% 5.07M ± 0% ~ (p=0.486 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB/parallel=true-16 129 ± 0% 131 ± 0% +1.55% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=100KB-16 129 ± 0% 131 ± 0% +1.55% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 129 ± 0% 131 ± 0% +1.55% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1/mem=unlimited-16 129 ± 0% 131 ± 0% +1.55% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=100KB-16 343 ± 0% 366 ± 5% +6.65% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16/mem=unlimited-16 361 ± 5% 349 ± 0% ~ (p=0.698 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=100KB-16 3.60k ± 0% 3.61k ± 0% +0.37% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=256/mem=unlimited-16 3.59k ± 0% 3.60k ± 0% +0.25% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=100KB-16 12.9k ± 0% 12.9k ± 0% ~ (p=0.381 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 12.9k ± 0% 12.9k ± 0% +0.08% (p=0.032 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=100KB-16 50.0k ± 1% 49.9k ± 0% ~ (p=0.556 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 49.9k ± 0% 49.9k ± 0% ~ (p=0.743 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=100KB-16 99.3k ± 0% 99.3k ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 99.4k ± 1% 99.3k ± 0% ~ (p=0.127 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=100KB-16 198k ± 0% 198k ± 0% ~ (p=1.000 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 198k ± 0% 199k ± 1% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=100KB-16 396k ± 0% 396k ± 0% ~ (p=0.730 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 395k ± 0% 396k ± 0% ~ (p=0.343 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=100KB-16 791k ± 0% 791k ± 0% ~ (p=1.000 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 792k ± 1% 793k ± 1% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB/parallel=true-16 135 ± 0% 141 ± 5% +4.44% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=100KB-16 135 ± 0% 137 ± 0% +1.48% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 135 ± 0% 137 ± 0% +1.48% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 135 ± 0% 137 ± 0% +1.48% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=100KB-16 453 ± 0% 458 ± 0% +1.19% (p=0.008 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 453 ± 1% 458 ± 0% +1.06% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=100KB-16 10.7k ±10% 10.1k ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 5.03k ± 1% 5.03k ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=100KB-16 37.9k ± 0% 37.9k ± 0% ~ (p=0.968 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 17.7k ± 0% 17.8k ± 1% +0.36% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=100KB-16 150k ± 1% 149k ± 1% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 68.6k ± 0% 68.6k ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=100KB-16 298k ± 0% 297k ± 0% ~ (p=0.111 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 136k ± 0% 137k ± 1% ~ (p=0.063 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=100KB-16 594k ± 0% 595k ± 0% +0.24% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 272k ± 0% 273k ± 1% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=100KB-16 1.19M ± 0% 1.19M ± 0% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 544k ± 1% 543k ± 0% ~ (p=0.286 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB/parallel=true-16 140 ± 0% 142 ± 0% +1.43% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=100KB-16 140 ± 0% 142 ± 0% +1.43% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 140 ± 0% 142 ± 0% +1.43% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 140 ± 0% 142 ± 0% +1.43% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=100KB-16 537 ± 0% 545 ± 1% +1.45% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 565 ± 8% 543 ± 0% ~ (p=0.619 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=100KB-16 16.1k ± 1% 16.2k ± 1% ~ (p=0.151 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 6.18k ± 0% 6.19k ± 0% ~ (p=0.086 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=100KB-16 61.2k ± 0% 61.2k ± 0% ~ (p=0.556 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 22.0k ± 1% 22.1k ± 1% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=100KB-16 242k ± 0% 242k ± 0% ~ (p=0.343 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 85.2k ± 0% 85.3k ± 0% ~ (p=0.690 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=100KB-16 483k ± 0% 483k ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 169k ± 0% 169k ± 0% ~ (p=0.686 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=100KB-16 969k ± 1% 967k ± 1% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 339k ± 1% 338k ± 0% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB/parallel=true-16 146 ± 0% 148 ± 0% +1.37% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=100KB-16 146 ± 0% 148 ± 0% +1.37% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 146 ± 0% 148 ± 0% +1.37% (p=0.016 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 146 ± 0% 148 ± 0% +1.37% (p=0.029 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=100KB-16 1.99k ± 1% 2.00k ± 1% ~ (p=0.087 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 639 ± 0% 644 ± 0% +0.72% (p=0.016 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=100KB-16 27.1k ± 0% 27.2k ± 0% ~ (p=0.057 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 7.60k ± 0% 7.61k ± 0% ~ (p=0.056 n=5+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=100KB-16 105k ± 0% 105k ± 0% ~ (p=0.314 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 27.2k ± 0% 27.4k ± 2% +0.57% (p=0.048 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=100KB-16 416k ± 0% 416k ± 0% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 106k ± 2% 106k ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=100KB-16 830k ± 0% 831k ± 0% ~ (p=0.686 n=4+4)
JoinReader/reqOrdering=true/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 211k ± 1% 212k ± 3% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited/parallel=true-16 115 ± 0% 116 ± 0% +0.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1/mem=unlimited-16 115 ± 0% 116 ± 0% +0.87% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16/mem=unlimited-16 247 ± 0% 252 ± 0% +2.02% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=256/mem=unlimited-16 2.50k ± 0% 2.50k ± 0% +0.30% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=1024/mem=unlimited-16 9.49k ± 1% 9.51k ± 1% ~ (p=0.087 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=4096/mem=unlimited-16 37.4k ± 0% 37.5k ± 0% +0.22% (p=0.048 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=8192/mem=unlimited-16 74.7k ± 0% 74.9k ± 0% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=16384/mem=unlimited-16 156k ± 0% 156k ± 0% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=32768/mem=unlimited-16 323k ± 1% 322k ± 1% ~ (p=0.310 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=65536/mem=unlimited-16 645k ± 0% 644k ± 0% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetoone/lookuprows=524288/mem=unlimited-16 5.23M ± 0% 5.23M ± 0% ~ (p=0.841 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited/parallel=true-16 117 ± 0% 118 ± 0% +0.85% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1/mem=unlimited-16 117 ± 0% 118 ± 0% +0.85% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16/mem=unlimited-16 279 ± 0% 284 ± 0% +1.79% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=256/mem=unlimited-16 3.01k ± 0% 3.02k ± 0% +0.26% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=1024/mem=unlimited-16 11.5k ± 0% 11.5k ± 0% ~ (p=0.071 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=4096/mem=unlimited-16 47.3k ± 0% 47.3k ± 0% +0.06% (p=0.029 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=8192/mem=unlimited-16 101k ± 0% 101k ± 1% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=16384/mem=unlimited-16 229k ± 1% 228k ± 0% ~ (p=0.286 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=32768/mem=unlimited-16 495k ± 0% 495k ± 0% ~ (p=0.286 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetofour/lookuprows=65536/mem=unlimited-16 1.01M ± 0% 1.04M ± 0% +3.38% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited/parallel=true-16 120 ± 0% 121 ± 0% +0.83% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1/mem=unlimited-16 120 ± 0% 121 ± 0% +0.83% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16/mem=unlimited-16 328 ± 0% 332 ± 0% +1.34% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=256/mem=unlimited-16 3.78k ± 0% 3.79k ± 0% +0.18% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=1024/mem=unlimited-16 15.1k ± 0% 15.2k ± 1% ~ (p=0.095 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=4096/mem=unlimited-16 69.7k ± 0% 69.7k ± 0% ~ (p=0.730 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=8192/mem=unlimited-16 167k ± 1% 166k ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=16384/mem=unlimited-16 633k ± 1% 441k ± 1% -30.36% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixteen/lookuprows=32768/mem=unlimited-16 2.09M ± 1% 1.04M ± 1% -50.57% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited/parallel=true-16 122 ± 0% 123 ± 0% +0.82% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1/mem=unlimited-16 122 ± 0% 123 ± 0% +0.82% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16/mem=unlimited-16 374 ±12% 364 ± 0% ~ (p=1.000 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=256/mem=unlimited-16 4.29k ± 0% 4.33k ± 2% +0.90% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=1024/mem=unlimited-16 18.0k ± 0% 18.1k ± 1% ~ (p=0.222 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=4096/mem=unlimited-16 91.8k ± 0% 91.7k ± 0% ~ (p=1.000 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=8192/mem=unlimited-16 237k ± 0% 237k ± 0% ~ (p=0.343 n=4+4)
JoinReader/reqOrdering=false/matchratio=onetothirtytwo/lookuprows=16384/mem=unlimited-16 691k ± 1% 689k ± 0% ~ (p=0.730 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited/parallel=true-16 123 ± 0% 124 ± 0% +0.81% (p=0.016 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1/mem=unlimited-16 123 ± 0% 124 ± 0% +1.14% (p=0.008 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=16/mem=unlimited-16 375 ± 0% 381 ± 1% +1.71% (p=0.016 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=256/mem=unlimited-16 4.91k ± 0% 4.92k ± 0% ~ (p=0.111 n=5+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=1024/mem=unlimited-16 21.3k ± 1% 21.1k ± 0% ~ (p=0.190 n=5+4)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=4096/mem=unlimited-16 124k ± 0% 125k ± 2% ~ (p=0.111 n=4+5)
JoinReader/reqOrdering=false/matchratio=onetosixtyfour/lookuprows=8192/mem=unlimited-16 355k ± 0% 356k ± 1% ~ (p=0.095 n=5+5)
Reviewable status: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @asubiotto and @rytaft)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great, thanks!
Reviewed 2 of 2 files at r6.
Reviewable status: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @asubiotto and @sumeerbhola)
pkg/sql/rowexec/utils_test.go, line 185 at r6 (raw file):
func (r *rowDisposer) DrainMeta(context.Context) []execinfrapb.ProducerMetadata { meta := r.bufferedMeta
I wonder what prompted this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @asubiotto and @yuzefovich)
pkg/sql/rowexec/utils_test.go, line 185 at r6 (raw file):
Previously, yuzefovich wrote…
I wonder what prompted this change.
The benchmarks were failing (including on master) because it expects exactly one entry in this slice https://github.com/cockroachdb/cockroach/blob/master/pkg/sql/rowexec/joinreader_test.go#L1088 and that isn't true when the benchmark runs for multiple iterations.
I noticed that MetadataSource
says DrainMeta
is called exactly once. We are violating that in the benchmark, but "reset" behavior seemed close enough.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @asubiotto and @sumeerbhola)
pkg/sql/rowexec/utils_test.go, line 185 at r6 (raw file):
Previously, sumeerbhola wrote…
The benchmarks were failing (including on master) because it expects exactly one entry in this slice https://github.com/cockroachdb/cockroach/blob/master/pkg/sql/rowexec/joinreader_test.go#L1088 and that isn't true when the benchmark runs for multiple iterations.
I noticed thatMetadataSource
saysDrainMeta
is called exactly once. We are violating that in the benchmark, but "reset" behavior seemed close enough.
Makes sense.
bors r+ |
Build succeeded: |
The paired joiners are used to accomplish left {outer,semi,anti}
joins when the first joiner will produce false positives (as
known to the optimizer).
Currently, only the invertedJoiner can function as this first
joiner but there is wording in the spec describing how this
could also be useful for join expressions that can't be fully
evaluated on one non-inverted index.
The first joiner outputs an additional bool column representing
a continuation value. This is used to demarcate groups of
consecutive rows output by the first joiner that represent
the same original left row. The first joiner needs to preserve
input row order (the invertedJoiner always does this). The
second joiner is a lookup join and handles these groups in
a special manner. The second join does not need to be order
preserving.
Informs #53576
Prior to this, the way to do:
do an inner join with the same ON condition, which is a pair
of inverted join and lookup join, and then wrap the expression
in another left join with the original left side.
outer join (previous bullet).
ON condition, which is a pair of inverted join and lookup
join, and then project, sort (or make the lookup join order
preserving) and dedup.
We expect that the alternative outlined in this PR (it excludes
the optimizer changes) will be more efficient since it is
simply a pairing of inverted joiner and lookup join (and the
latter does not need to be order preserving).
Release note: None