mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
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).
This commit is contained in:
parent
3600e6b81c
commit
97e834e151
1 changed files with 14 additions and 3 deletions
|
@ -11009,10 +11009,21 @@ static bool create_internal_tmp_table(TABLE *table,TMP_TABLE_PARAM *param,
|
|||
OPTION_BIG_TABLES)
|
||||
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,
|
||||
share->reclength < 64 &&
|
||||
!share->blob_fields ? STATIC_RECORD :
|
||||
BLOCK_RECORD,
|
||||
(share->reclength < 64 &&
|
||||
!share->blob_fields ? STATIC_RECORD :
|
||||
!param->sum_func_count ? DYNAMIC_RECORD :
|
||||
BLOCK_RECORD),
|
||||
share->keys, &keydef,
|
||||
(uint) (param->recinfo-param->start_recinfo),
|
||||
param->start_recinfo,
|
||||
|
|
Loading…
Reference in a new issue