Is it only me or others have experienced this as well? :
After upgrading to 5.1.23 from 22 I noticed that the select performance has degraded, so I did the Explain and found out that in 5.1.23/24 the GROUP BY causes incorrect index selection - works fine in 5.1.22 and before. Did something change how the indexes are chosen on 5.1.23?
Any help is greatly appreciated!
Thx,
dstv
here is the table definition:
CREATE TABLE pro_attribute
(
ObjectId
decimal(18,0) NOT NULL,
ClassAttrName
varchar(255) NOT NULL,
Data
varchar(2000) DEFAULT NULL,
VersionId
int(10) DEFAULT NULL,
Timestamp
char(25) DEFAULT NULL,
Synchronized
tinyint(1) DEFAULT NULL,
Locked
tinyint(1) DEFAULT NULL,
PRIMARY KEY (ObjectId
,ClassAttrName
),
KEY Index_Name_Data
(ClassAttrName
,Data
(255)) USING BTREE,
CONSTRAINT FK_pro_attribute_objectid
FOREIGN KEY (ObjectId
) REFERENCES pro_object
(Id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=1
and here are the explains:
5.1.22 (works fine):
EXPLAIN EXTENDED SELECT ObjectId, COUNT(ObjectId) CNT FROM PRO_ATTRIBUTE WHERE (ClassAttrName=‘OBJECT_ParentId’ AND Data = ‘184’ ) OR (ClassAttrName=‘OBJECT_ClassName’ AND Data IN (‘Activity’, ‘ExternalActivity’, ‘InternalActivity’)) GROUP BY ObjectId HAVING CNT = 2;
±—±------------±--------------±------±--------------- -±----------------±--------±-----±-----±---------±---- -----------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
±—±------------±--------------±------±--------------- -±----------------±--------±-----±-----±---------±---- -----------------------------------------+
| 1 | SIMPLE | PRO_ATTRIBUTE | range | Index_Name_Data | Index_Name_Data | 1535 | NULL | 14 | 100.00 | Using where; Using temporary; Using filesort |
±—±------------±--------------±------±--------------- -±----------------±--------±-----±-----±---------±---- -----------------------------------------+
1 row in set, 1 warning (0.53 sec)
=====================================================
5.1.23/24 (wrong key selected):
EXPLAIN EXTENDED SELECT ObjectId, COUNT(ObjectId) CNT FROM PRO_ATTRIBUTE WHERE (ClassAttrName=‘OBJECT_ParentId’ AND Data = ‘184’ ) OR (ClassAttrName=‘OBJECT_ClassName’ AND Data IN (‘Activity’, ‘ExternalActivity’, ‘InternalActivity’)) GROUP BY ObjectId HAVING CNT = 2;
±—±------------±--------------±------±--------------- -±--------±--------±-----±--------±---------±--------- —+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
±—±------------±--------------±------±--------------- -±--------±--------±-----±--------±---------±--------- —+
| 1 | SIMPLE | PRO_ATTRIBUTE | index | Index_Name_Data | PRIMARY | 775 | NULL | 1291738 | 0.00 | Using where |
±—±------------±--------------±------±--------------- -±--------±--------±-----±--------±---------±--------- —+
1 row in set, 1 warning (0.00 sec)
If I take “GROUP BY” out the explain show the same result as for 5.1.22.