Used the basic column store for tmp relations w/o variable length attributes.
diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt
index 8912414..a91ab3f 100644
--- a/query_optimizer/CMakeLists.txt
+++ b/query_optimizer/CMakeLists.txt
@@ -131,6 +131,7 @@
                       quickstep_relationaloperators_TextScanOperator
                       quickstep_relationaloperators_UpdateOperator
                       quickstep_storage_AggregationOperationState_proto
+                      quickstep_storage_BasicColumnStoreTupleStorageSubBlock
                       quickstep_storage_HashTableFactory
                       quickstep_storage_HashTable_proto
                       quickstep_storage_InsertDestination_proto
diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp
index 45f5f78..d6db2a4 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -105,6 +105,7 @@
 #include "relational_operators/TextScanOperator.hpp"
 #include "relational_operators/UpdateOperator.hpp"
 #include "storage/AggregationOperationState.pb.h"
+#include "storage/BasicColumnStoreTupleStorageSubBlock.hpp"
 #include "storage/HashTable.pb.h"
 #include "storage/HashTableFactory.hpp"
 #include "storage/InsertDestination.pb.h"
@@ -149,6 +150,8 @@
 DEFINE_bool(optimize_joins, false,
             "Enable post execution plan generation optimizations for joins.");
 
+DEFINE_bool(use_column_store, true, "Use the column store for blocks in temporary relations.");
+
 namespace E = ::quickstep::optimizer::expressions;
 namespace P = ::quickstep::optimizer::physical;
 namespace S = ::quickstep::serialization;
@@ -325,6 +328,23 @@
     ++aid;
   }
 
+  if (FLAGS_use_column_store && !catalog_relation->isVariableLength()) {
+    StorageBlockLayoutDescription layout_description;
+    layout_description.set_num_slots(1);
+    layout_description.mutable_tuple_store_description()
+        ->set_sub_block_type(TupleStorageSubBlockDescription::BASIC_COLUMN_STORE);
+
+    DCHECK(BasicColumnStoreTupleStorageSubBlock::DescriptionIsValid(*catalog_relation,
+                                                                    layout_description.tuple_store_description()));
+
+    unique_ptr<StorageBlockLayout> layout(
+        new StorageBlockLayout(*catalog_relation, layout_description));
+    layout->finalize();
+    catalog_relation->setDefaultStorageBlockLayout(layout.release());
+  } else {
+    // Use the default row store for variable length attributes.
+  }
+
   *catalog_relation_output = catalog_relation.get();
   const relation_id output_rel_id = optimizer_context_->catalog_database()->addRelation(
       catalog_relation.release());
@@ -335,6 +355,9 @@
 
   insert_destination_proto->set_insert_destination_type(S::InsertDestinationType::BLOCK_POOL);
   insert_destination_proto->set_relation_id(output_rel_id);
+
+  insert_destination_proto->mutable_layout()->MergeFrom(
+      (*catalog_relation_output)->getDefaultStorageBlockLayout().getDescription());
 }
 
 void ExecutionGenerator::dropAllTemporaryRelations() {
diff --git a/storage/StorageBlockLayout.proto b/storage/StorageBlockLayout.proto
index cafc0e9..4db6f06 100644
--- a/storage/StorageBlockLayout.proto
+++ b/storage/StorageBlockLayout.proto
@@ -66,7 +66,7 @@
     SMA = 1;
     BLOOM_FILTER = 2;
     BITWEAVING_H = 3;
-    BITWEAVING_V = 4;    
+    BITWEAVING_V = 4;
   }
 
   required IndexSubBlockType sub_block_type = 1;