**Describe the bug**
If we add a new column to table via ALTER TABLE ADD COLUMN command and use in DEFAULT section some expression with array functions, it requires much more memory than using that expression by itself in query.

**How to reproduce**
Clickhouse version 20.12, 20.8
```
CREATE TABLE test_extract(str String,  arr Array(Array(String)) ALIAS extractAllGroupsHorizontal(str, '\\W(\\w+)=("[^"]*?"|[^",}]*)')) ENGINE=MergeTree() PARTITION BY tuple() ORDER BY tuple() ;
INSERT INTO test_extract WITH range(30) as range_arr, arrayMap(x-> concat(toString(x),'Id'), range_arr) as key, arrayMap(x -> rand() % 30, range_arr) as val, arrayStringConcat(arrayMap((x,y) -> concat(x,'=',toString(y)), key, val),',') as str SELECT str FROM numbers(2000000);
ALTER TABLE test_extract  add column `15Id` Nullable(UInt16) DEFAULT toUInt16OrNull(arrayFirst((v, k) -> (k = '15Id'),arr[2],arr[1]));
SELECT DISTINCT 15Id FROM test_extract;
2020.11.23 18:34:24.541648 [ 10823 ] {2b0a29fb-885e-4e3b-8acf-7379b3996c63} <Information> executeQuery: Read 2000000 rows, 440.62 MiB in 8.5199527 sec., 234743 rows/sec., 51.72 MiB/sec.
2020.11.23 18:34:24.541787 [ 10823 ] {2b0a29fb-885e-4e3b-8acf-7379b3996c63} <Debug> MemoryTracker: Peak memory usage (for query): 906.80 MiB.

30 rows in set. Elapsed: 8.521 sec. Processed 2.00 million rows, 462.03 MB (234.71 thousand rows/s., 54.22 MB/s.)

SELECT DISTINCT toUInt16OrNull(arrayFirst((v, k) -> (k = '15Id'),arr[2],arr[1])) FROM test_extract;

 2020.11.23 18:34:56.722182 [ 10823 ] {f9520e0f-1982-46f5-9123-cb6abbb732b2} <Information> executeQuery: Read 2000000 rows, 434.90 MiB in 6.9211621 sec., 288968 rows/sec., 62.84 MiB/sec.
2020.11.23 18:34:56.722235 [ 10823 ] {f9520e0f-1982-46f5-9123-cb6abbb732b2} <Debug> MemoryTracker: Peak memory usage (for query): 115.43 MiB.

30 rows in set. Elapsed: 6.923 sec. Processed 2.00 million rows, 456.03 MB (288.87 thousand rows/s., 65.87 MB/s.)
```


**Expected behavior**
Both queries would use similar amounts of RAM.

#include <Storages/MergeTree/MergeTreeReverseSelectProcessor.h>
#include <Storages/MergeTree/MergeTreeBaseSelectProcessor.h>
#include <Storages/MergeTree/IMergeTreeReader.h>
#include <Interpreters/Context.h>
namespace DB
{
namespace ErrorCodes
{
    extern const int MEMORY_LIMIT_EXCEEDED;
}
MergeTreeReverseSelectProcessor::MergeTreeReverseSelectProcessor(