mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-11172: EXPLAIN shows non-sensical value for key_len with type=index
The issue happens when the secondary keys are extended with primary key parts. Inside the function TABLE_SHARE::init_from_binary_frm_image() adds the length bytes for the primary key key parts to the length of the secondary key. This is not needed because when the extended keys are used we recalculate the length for the used key parts. Also removed TABLE_SHARE::total_key_length as it is not used in the code Apporved-by: Monty <monty@mariadb.org>
This commit is contained in:
10
sql/table.cc
10
sql/table.cc
@@ -2273,6 +2273,12 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
||||
key_part->null_bit= field->null_bit;
|
||||
key_part->store_length+=HA_KEY_NULL_LENGTH;
|
||||
keyinfo->flags|=HA_NULL_PART_KEY;
|
||||
|
||||
/*
|
||||
This branch is executed only for user defined key parts of the
|
||||
secondary indexes.
|
||||
*/
|
||||
DBUG_ASSERT(i < keyinfo->user_defined_key_parts);
|
||||
keyinfo->key_length+= HA_KEY_NULL_LENGTH;
|
||||
}
|
||||
if (field->type() == MYSQL_TYPE_BLOB ||
|
||||
@@ -2285,7 +2291,8 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
||||
else
|
||||
key_part->key_part_flag|= HA_VAR_LENGTH_PART;
|
||||
key_part->store_length+=HA_KEY_BLOB_LENGTH;
|
||||
keyinfo->key_length+= HA_KEY_BLOB_LENGTH;
|
||||
if (i < keyinfo->user_defined_key_parts)
|
||||
keyinfo->key_length+= HA_KEY_BLOB_LENGTH;
|
||||
}
|
||||
if (field->type() == MYSQL_TYPE_BIT)
|
||||
key_part->key_part_flag|= HA_BIT_PART;
|
||||
@@ -2378,7 +2385,6 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
|
||||
|
||||
set_if_bigger(share->max_key_length,keyinfo->key_length+
|
||||
keyinfo->user_defined_key_parts);
|
||||
share->total_key_length+= keyinfo->key_length;
|
||||
/*
|
||||
MERGE tables do not have unique indexes. But every key could be
|
||||
an unique index on the underlying MyISAM table. (Bug #10400)
|
||||
|
Reference in New Issue
Block a user