mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Fix significant join performance regression
This commit is contained in:
parent
94b33498ae
commit
9a6e6ccfaf
@ -1003,15 +1003,13 @@ public:
|
||||
/// If it's joinGetOrNull, we need to wrap not-nullable columns in StorageJoin.
|
||||
for (size_t j = 0, size = right_indexes.size(); j < size; ++j)
|
||||
{
|
||||
auto column_from_block = block.getByPosition(right_indexes[j]);
|
||||
if (type_name[j].type->lowCardinality() != column_from_block.type->lowCardinality())
|
||||
{
|
||||
JoinCommon::changeLowCardinalityInplace(column_from_block);
|
||||
}
|
||||
|
||||
const auto & column_from_block = block.getByPosition(right_indexes[j]);
|
||||
if (auto * nullable_col = typeid_cast<ColumnNullable *>(columns[j].get());
|
||||
nullable_col && !column_from_block.column->isNullable())
|
||||
nullable_col->insertFromNotNullable(*column_from_block.column, row_num);
|
||||
else if (auto * lowcard_col = typeid_cast<ColumnLowCardinality *>(columns[j].get());
|
||||
lowcard_col && !typeid_cast<const ColumnLowCardinality *>(column_from_block.column.get()))
|
||||
lowcard_col->insertFromFullColumn(*column_from_block.column, row_num);
|
||||
else
|
||||
columns[j]->insertFrom(*column_from_block.column, row_num);
|
||||
}
|
||||
@ -1020,12 +1018,12 @@ public:
|
||||
{
|
||||
for (size_t j = 0, size = right_indexes.size(); j < size; ++j)
|
||||
{
|
||||
auto column_from_block = block.getByPosition(right_indexes[j]);
|
||||
if (type_name[j].type->lowCardinality() != column_from_block.type->lowCardinality())
|
||||
{
|
||||
JoinCommon::changeLowCardinalityInplace(column_from_block);
|
||||
}
|
||||
columns[j]->insertFrom(*column_from_block.column, row_num);
|
||||
const auto & column_from_block = block.getByPosition(right_indexes[j]);
|
||||
if (auto * lowcard_col = typeid_cast<ColumnLowCardinality *>(columns[j].get());
|
||||
lowcard_col && !typeid_cast<const ColumnLowCardinality *>(column_from_block.column.get()))
|
||||
lowcard_col->insertFromFullColumn(*column_from_block.column, row_num);
|
||||
else
|
||||
columns[j]->insertFrom(*column_from_block.column, row_num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
3
tests/performance/join_append_block.xml
Normal file
3
tests/performance/join_append_block.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<test>
|
||||
<query tag='INNER'>SELECT count(c) FROM numbers_mt(100000000) AS a INNER JOIN (SELECT number, toString(number) AS c FROM numbers(2000000)) AS b ON (a.number % 10000000) = b.number</query>
|
||||
</test>
|
Loading…
Reference in New Issue
Block a user