Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.1(EOL)
-
None
Description
Discovered this while working on MDEV-10325:
https://jira.mariadb.org/browse/MDEV-10325?focusedCommentId=84856&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-84856
I've narrowed it down to two tables, with identical columns and indexes, except
that the order of indexes is different:
create table t200 (
|
index_id bigint(20) unsigned NOT NULL AUTO_INCREMENT ,
|
index_class varchar(265) COLLATE latin1_general_ci DEFAULT NULL ,
|
index_object_id int(10) unsigned NOT NULL DEFAULT '0' ,
|
index_date_updated int(10) unsigned DEFAULT NULL ,
|
|
PRIMARY KEY (index_id),
|
KEY object (index_class(181),index_object_id),
|
KEY index_date_updated (index_date_updated)
|
) engine=innodb;
|
create table t200swp (
|
index_id bigint(20) unsigned NOT NULL AUTO_INCREMENT ,
|
index_class varchar(265) COLLATE latin1_general_ci DEFAULT NULL ,
|
index_object_id int(10) unsigned NOT NULL DEFAULT '0' ,
|
index_date_updated int(10) unsigned DEFAULT NULL ,
|
|
PRIMARY KEY (index_id),
|
KEY index_date_updated (index_date_updated),
|
KEY object (index_class(181),index_object_id)
|
) engine=innodb;
|
Now, look at the key defintions.
(gdb) p table->s.table_name
|
$209 = {str = 0x7fff501ae65c "t200", length = 4}
|
(gdb) p table->key_info[0]
|
$210 = {key_length = 8, flags = 1, user_defined_key_parts = 1,
|
usable_key_parts = 1, ext_key_parts = 1, ext_key_flags = 1,
|
ext_key_part_map = 0, ... name = 0x7fff501a4f99 "PRIMARY",... }
|
(gdb) p table->key_info[1]
|
$211 = {key_length = 188, flags = 104, user_defined_key_parts = 2,
|
usable_key_parts = 2, ext_key_parts = 2, ext_key_flags = 104,
|
ext_key_part_map = 0, ... name = 0x7fff501a4fa1 "object" ... }
|
(gdb) p table->key_info[2]
|
$212 = {key_length = 5, flags = 64, user_defined_key_parts = 1,
|
usable_key_parts = 1, ext_key_parts = 1, ext_key_flags = 64,
|
ext_key_part_map = 0, ... name = 0x7fff501a4fa8 "index_date_updated"}
|
(gdb) p table->s.table_name
|
$216 = {str = 0x7fff501b25bc "t200swp", length = 7}
|
(gdb) p table->key_info[0]
|
$217 = {key_length = 8, flags = 1, user_defined_key_parts = 1,
|
usable_key_parts = 1, ext_key_parts = 1, ext_key_flags = 1,
|
ext_key_part_map = 0, ... name = 0x7fff501b4479 "PRIMARY"}
|
(gdb) p table->key_info[1]
|
$218 = {key_length = 5, flags = 64, user_defined_key_parts = 1,
|
usable_key_parts = 2, ext_key_parts = 2, ext_key_flags = 131136,
|
ext_key_part_map = 1, ... name = 0x7fff501b4481 "index_date_updated"}
|
(gdb) p table->key_info[2]
|
$219 = {key_length = 188, flags = 104, user_defined_key_parts = 2,
|
usable_key_parts = 2, ext_key_parts = 2, ext_key_flags = 104,
|
ext_key_part_map = 0, ... name = 0x7fff501b4494 "object", }
|
Compare the attributes of 'index_date_updated' key:
- t200swp has user_defined_key_parts=1, ext_key_parts=2, correct.
- t200 has: user_defined_key_parts=1, ext_key_parts=1. Why 1?
I could understand that there may be some limitations that prevent inclusion of
PK components into the secondary key (like maximum index tuple length perhaps?)
What I don't understand is why the order of indexes in the table plays a role.
Attachments
Issue Links
- relates to
-
MDEV-10325 Queries examines all rows of a tables when it should not
- Closed