diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc index 3a71da6ba84..836a1a4331e 100644 --- a/sql/ha_innobase.cc +++ b/sql/ha_innobase.cc @@ -2961,7 +2961,8 @@ ha_innobase::records_in_range( KEY* key; dict_index_t* index; mysql_byte* key_val_buff2 = (mysql_byte*) my_malloc( - table->reclength, + table->reclength + + table->max_key_length + 100, MYF(MY_WME)); dtuple_t* range_start; dtuple_t* range_end; diff --git a/sql/ha_innobase.h b/sql/ha_innobase.h index b6419a5e74e..b1613c2503c 100644 --- a/sql/ha_innobase.h +++ b/sql/ha_innobase.h @@ -96,10 +96,12 @@ class ha_innobase: public handler uint max_record_length() const { return HA_MAX_REC_LENGTH; } uint max_keys() const { return MAX_KEY; } uint max_key_parts() const { return MAX_REF_PARTS; } - /* An InnoDB page must store >= 2 keys: - max key length is therefore set to 7000 - bytes */ - uint max_key_length() const { return 7000; } + /* An InnoDB page must store >= 2 keys; + a secondary key record must also contain the + primary key value: + max key length is therefore set to slightly + less than 1 / 4 of page size which is 16 kB */ + uint max_key_length() const { return 3500; } bool fast_key_read() { return 1;} key_map keys_to_use_for_scanning() { return ~(key_map) 0; } bool has_transactions() { return 1;}