Commit 97e834e1 authored by Michael Widenius's avatar Michael Widenius

Use dynamic row format when creating temporary tables without sumary fields.

The reason for this is that BLOCK_RECORD format is not good when there is a lot of duplicated keys as it first writes the data (to get the row position) and
then writes the key (and thus checks for duplicates).
parent 3600e6b8
...@@ -11009,10 +11009,21 @@ static bool create_internal_tmp_table(TABLE *table,TMP_TABLE_PARAM *param, ...@@ -11009,10 +11009,21 @@ static bool create_internal_tmp_table(TABLE *table,TMP_TABLE_PARAM *param,
OPTION_BIG_TABLES) OPTION_BIG_TABLES)
create_info.data_file_length= ~(ulonglong) 0; create_info.data_file_length= ~(ulonglong) 0;
/*
The logic for choosing the record format:
The STATIC_RECORD format is the fastest one, because it's so simple,
so we use this by default for short rows.
BLOCK_RECORD caches both row and data, so this is generally faster than
DYNAMIC_RECORD. The one exception is when we write to tmp table
(no updates == no sum fields) in which case BLOCK RECORD is slower as
we first write the row, then check for key conflicts and then we have to
delete the row.
*/
if ((error= maria_create(share->table_name.str, if ((error= maria_create(share->table_name.str,
share->reclength < 64 && (share->reclength < 64 &&
!share->blob_fields ? STATIC_RECORD : !share->blob_fields ? STATIC_RECORD :
BLOCK_RECORD, !param->sum_func_count ? DYNAMIC_RECORD :
BLOCK_RECORD),
share->keys, &keydef, share->keys, &keydef,
(uint) (param->recinfo-param->start_recinfo), (uint) (param->recinfo-param->start_recinfo),
param->start_recinfo, param->start_recinfo,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment