Skip to content

Commit b18be40

Browse files
committed
ColumnString improve performance(26%) by avoiding vector reallocate
1 parent 574da81 commit b18be40

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

clickhouse/columns/string.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ ColumnString::ColumnString()
166166
{
167167
}
168168

169+
ColumnString::ColumnString(size_t element_count)
170+
: Column(Type::CreateString())
171+
{
172+
items_.reserve(element_count);
173+
blocks_.reserve(element_count / 2);
174+
}
175+
169176
ColumnString::ColumnString(const std::vector<std::string>& data)
170177
: ColumnString()
171178
{
@@ -291,7 +298,7 @@ size_t ColumnString::Size() const {
291298
}
292299

293300
ColumnRef ColumnString::Slice(size_t begin, size_t len) const {
294-
auto result = std::make_shared<ColumnString>();
301+
auto result = std::make_shared<ColumnString>(len);
295302

296303
if (begin < items_.size()) {
297304
len = std::min(len, items_.size() - begin);

clickhouse/columns/string.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class ColumnString : public Column {
7878
ColumnString();
7979
~ColumnString();
8080

81+
explicit ColumnString(size_t element_count);
8182
explicit ColumnString(const std::vector<std::string> & data);
8283
explicit ColumnString(std::vector<std::string>&& data);
8384
ColumnString& operator=(const ColumnString&) = delete;

0 commit comments

Comments
 (0)