Commit 3626379d authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-20168: main.innodb_icp fails in BB with various wrong execution plans

Add FORCE INDEX and ANALYZE TABLE PERSISTENT FOR ALL to make the plans
stable.
parent f57deb31
...@@ -160,7 +160,7 @@ INSERT INTO t1 VALUES ...@@ -160,7 +160,7 @@ INSERT INTO t1 VALUES
--echo --echo
--echo # Execute select with invalid timestamp, desc ordering --echo # Execute select with invalid timestamp, desc ordering
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -169,7 +169,7 @@ LIMIT 2; ...@@ -169,7 +169,7 @@ LIMIT 2;
--echo # Should use index condition --echo # Should use index condition
EXPLAIN EXPLAIN
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -456,6 +456,7 @@ INSERT INTO t2 VALUES (11,1); ...@@ -456,6 +456,7 @@ INSERT INTO t2 VALUES (11,1);
INSERT INTO t2 VALUES (12,2); INSERT INTO t2 VALUES (12,2);
INSERT INTO t2 VALUES (15,4); INSERT INTO t2 VALUES (15,4);
analyze table t1,t2 persistent for all;
set @save_optimizer_switch= @@optimizer_switch; set @save_optimizer_switch= @@optimizer_switch;
set optimizer_switch='semijoin=off'; set optimizer_switch='semijoin=off';
...@@ -725,6 +726,7 @@ CREATE TABLE t2 (a varchar(1024), KEY (a(512))); ...@@ -725,6 +726,7 @@ CREATE TABLE t2 (a varchar(1024), KEY (a(512)));
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w'); ('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w');
analyze table t1,t2 persistent for all;
SET SESSION optimizer_switch='index_condition_pushdown=off'; SET SESSION optimizer_switch='index_condition_pushdown=off';
EXPLAIN EXPLAIN
SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0) SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0)
......
...@@ -156,7 +156,7 @@ INSERT INTO t1 VALUES ...@@ -156,7 +156,7 @@ INSERT INTO t1 VALUES
# Execute select with invalid timestamp, desc ordering # Execute select with invalid timestamp, desc ordering
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -167,7 +167,7 @@ ts c ...@@ -167,7 +167,7 @@ ts c
# Should use index condition # Should use index condition
EXPLAIN EXPLAIN
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -429,6 +429,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL); ...@@ -429,6 +429,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL);
INSERT INTO t2 VALUES (11,1); INSERT INTO t2 VALUES (11,1);
INSERT INTO t2 VALUES (12,2); INSERT INTO t2 VALUES (12,2);
INSERT INTO t2 VALUES (15,4); INSERT INTO t2 VALUES (15,4);
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
set @save_optimizer_switch= @@optimizer_switch; set @save_optimizer_switch= @@optimizer_switch;
set optimizer_switch='semijoin=off'; set optimizer_switch='semijoin=off';
EXPLAIN EXPLAIN
...@@ -685,6 +691,12 @@ INSERT INTO t1 VALUES (1,4,'Ill'); ...@@ -685,6 +691,12 @@ INSERT INTO t1 VALUES (1,4,'Ill');
CREATE TABLE t2 (a varchar(1024), KEY (a(512))); CREATE TABLE t2 (a varchar(1024), KEY (a(512)));
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w'); ('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w');
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
SET SESSION optimizer_switch='index_condition_pushdown=off'; SET SESSION optimizer_switch='index_condition_pushdown=off';
EXPLAIN EXPLAIN
SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0) SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0)
......
...@@ -149,7 +149,7 @@ INSERT INTO t1 VALUES ...@@ -149,7 +149,7 @@ INSERT INTO t1 VALUES
# Execute select with invalid timestamp, desc ordering # Execute select with invalid timestamp, desc ordering
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -160,7 +160,7 @@ ts c ...@@ -160,7 +160,7 @@ ts c
# Should use index condition # Should use index condition
EXPLAIN EXPLAIN
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -422,6 +422,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL); ...@@ -422,6 +422,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL);
INSERT INTO t2 VALUES (11,1); INSERT INTO t2 VALUES (11,1);
INSERT INTO t2 VALUES (12,2); INSERT INTO t2 VALUES (12,2);
INSERT INTO t2 VALUES (15,4); INSERT INTO t2 VALUES (15,4);
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
set @save_optimizer_switch= @@optimizer_switch; set @save_optimizer_switch= @@optimizer_switch;
set optimizer_switch='semijoin=off'; set optimizer_switch='semijoin=off';
EXPLAIN EXPLAIN
...@@ -678,6 +684,12 @@ INSERT INTO t1 VALUES (1,4,'Ill'); ...@@ -678,6 +684,12 @@ INSERT INTO t1 VALUES (1,4,'Ill');
CREATE TABLE t2 (a varchar(1024), KEY (a(512))); CREATE TABLE t2 (a varchar(1024), KEY (a(512)));
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w'); ('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w');
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
SET SESSION optimizer_switch='index_condition_pushdown=off'; SET SESSION optimizer_switch='index_condition_pushdown=off';
EXPLAIN EXPLAIN
SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0) SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0)
......
...@@ -151,7 +151,7 @@ INSERT INTO t1 VALUES ...@@ -151,7 +151,7 @@ INSERT INTO t1 VALUES
# Execute select with invalid timestamp, desc ordering # Execute select with invalid timestamp, desc ordering
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -162,7 +162,7 @@ ts c ...@@ -162,7 +162,7 @@ ts c
# Should use index condition # Should use index condition
EXPLAIN EXPLAIN
SELECT * SELECT *
FROM t1 FROM t1 FORCE INDEX(PRIMARY)
WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00' WHERE ts BETWEEN '0000-00-00' AND '2010-00-01 00:00:00'
ORDER BY ts DESC ORDER BY ts DESC
LIMIT 2; LIMIT 2;
...@@ -424,6 +424,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL); ...@@ -424,6 +424,12 @@ CREATE TABLE t2 (pk INTEGER PRIMARY KEY, i INTEGER NOT NULL);
INSERT INTO t2 VALUES (11,1); INSERT INTO t2 VALUES (11,1);
INSERT INTO t2 VALUES (12,2); INSERT INTO t2 VALUES (12,2);
INSERT INTO t2 VALUES (15,4); INSERT INTO t2 VALUES (15,4);
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
set @save_optimizer_switch= @@optimizer_switch; set @save_optimizer_switch= @@optimizer_switch;
set optimizer_switch='semijoin=off'; set optimizer_switch='semijoin=off';
EXPLAIN EXPLAIN
...@@ -680,6 +686,12 @@ INSERT INTO t1 VALUES (1,4,'Ill'); ...@@ -680,6 +686,12 @@ INSERT INTO t1 VALUES (1,4,'Ill');
CREATE TABLE t2 (a varchar(1024), KEY (a(512))); CREATE TABLE t2 (a varchar(1024), KEY (a(512)));
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w'); ('Ill'), ('eckqzsflbzaffti'), ('w'), ('she'), ('gxbwypqtjzwywwer'), ('w');
analyze table t1,t2 persistent for all;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
SET SESSION optimizer_switch='index_condition_pushdown=off'; SET SESSION optimizer_switch='index_condition_pushdown=off';
EXPLAIN EXPLAIN
SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0) SELECT t1.b, t1.c FROM t1, t2 WHERE t1.a = t2.a AND (t1.b<0 OR t1.b>0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment