drop table if exists t1,t2;
#
# Bug #878769 : valgrind complains when using join cache
# to join an InnoDB table without primary key
#
CREATE TABLE t1 (
col_int_key int(11 ), col_time_key time, col_varchar_key varchar(1 ),
KEY (col_int_key), KEY (col_varchar_key,col_int_key)
) ENGINE=InnoDB;
INSERT IGNORE INTO t1 VALUES
(7 ,'10:19:31' ,'d' ),(1 ,'14:40:36' ,'r' ),(7 ,'04:37:47' ,'f' ),(9 ,'19:34:06' ,'y' ),
(2 ,'00:00:00' ,'m' ),(4 ,'00:13:25' ,'q' ),(0 ,'03:47:16' ,NULL),(4 ,'01:41:48' ,'d' ),
(8 ,'00:00:00' ,'g' ),(NULL,'22:32:04' ,'x' ),(NULL,'16:44:14' ,'f' ),
(0 ,'17:38:37' ,'p' ),(NULL,'08:46:48' ,'j' ),(8 ,'14:11:27' ,'c' );
CREATE TABLE t2 (
col_int_nokey int(11 ), col_int_key int(11 ),
col_datetime_key datetime, col_datetime_nokey datetime,
col_varchar_key varchar(1 ), col_varchar_nokey varchar(1 ),
KEY (col_int_key), KEY (col_varchar_key,col_int_key)
);
INSERT IGNORE INTO t2 VALUES
(150 ,62 ,'2008-01-03 10:33:32' ,'2008-01-03 10:33:32' ,'v' ,'v' ),
(2 ,1 ,'2007-10-09 19:53:04' ,'2007-10-09 19:53:04' ,NULL,NULL),
(5 ,0 ,'2001-11-08 21:02:12' ,'2001-11-08 21:02:12' ,'x' ,'x' ),
(3 ,7 ,'2003-04-01 00:00' ,'2003-04-01 00:00' ,'i' ,'i' ),
(1 ,7 ,'1900-01-01 00:00' ,'1900-01-01 00:00:00' ,'e' ,'e' ),
(NULL,7 ,'2005-04-04 01:21' ,'2005-04-04 01:21' ,'s' ,'s' ),
(2 ,1 ,'1900-01-01 00:00' ,'1900-01-01 00:00' ,'j' ,'j' ),
(8 ,0 ,'2004-04-28 21:44' ,'2004-04-28 21:44' ,'a' ,'a' ),
(6 ,8 ,'2001-04-18 00:00' ,'2001-04-18 00:00:00' ,'y' ,'y' ),
(8 ,1 ,'2008-12-18 19:39:55' ,'2008-12-18 19:39:55' ,NULL,NULL),
(3 ,1 ,'2000-08-01 12:19:39' ,'2000-08-01 12:19:39' ,'r' ,'r' ),
(3 ,9 ,'2004-09-25 21:29:06' ,'2004-09-25 21:29:06' ,'v' ,'v' );
set session optimizer_switch='mrr=on,mrr_sort_keys=on' ;
set session join_cache_level=6 ;
EXPLAIN
SELECT t1.col_time_key, t1.col_varchar_key
FROM t2 STRAIGHT_JOIN t1 ON t1.col_int_key = t2.col_int_key
GROUP BY 1 ,2 ;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index col_int_key col_int_key 5 NULL 12 Using where; Using index; Using temporary; Using filesort
1 SIMPLE t1 ref col_int_key col_int_key 5 test.t2.col_int_key 1 Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
SELECT t1.col_time_key, t1.col_varchar_key
FROM t2 STRAIGHT_JOIN t1 ON t1.col_int_key = t2.col_int_key
GROUP BY 1 ,2 ;
col_time_key col_varchar_key
00 :00 :00 g
03 :47 :16 NULL
04 :37 :47 f
10 :19 :31 d
14 :11 :27 c
14 :40 :36 r
17 :38 :37 p
19 :34 :06 y
set session optimizer_switch=default;
set session join_cache_level=default;
DROP TABLE t1,t2;
Messung V0.5 in Prozent C=76 H=100 G=88
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland