summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/main/sort_nest.result58
-rw-r--r--mysql-test/main/sort_nest.test37
2 files changed, 95 insertions, 0 deletions
diff --git a/mysql-test/main/sort_nest.result b/mysql-test/main/sort_nest.result
index 6ab2f3cd595..3c5c36fb141 100644
--- a/mysql-test/main/sort_nest.result
+++ b/mysql-test/main/sort_nest.result
@@ -2047,6 +2047,64 @@ a a b b
1 1 1 1
0 0 0 0
set @@optimizer_switch= @save_optimizer_switch;
+#
+# Semi join materialization lookup
+#
+EXPLAIN SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+WHERE t1.a=t2.a AND
+t1.b IN (SELECT t4.a FROM t3,t4 WHERE t4.a <= 5)
+ORDER BY t2.b DESC, t1.b DESC
+LIMIT 5;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t2 ALL a NULL NULL NULL 10 Using where
+1 PRIMARY t1 ref a a 5 test.t2.a 1
+1 PRIMARY <sort-nest> ALL NULL NULL NULL NULL 1 Using filesort
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+2 MATERIALIZED t3 index NULL b 5 NULL 10 Using index
+2 MATERIALIZED t4 index a a 5 NULL 10 Using where; Using index; Using join buffer (flat, BNL join)
+SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+WHERE t1.a=t2.a AND
+t1.b IN (SELECT t4.a FROM t3,t4 WHERE t4.a <= 5)
+ORDER BY t2.b DESC, t1.b DESC
+LIMIT 5;
+a a b b
+4 4 4 4
+3 3 3 3
+2 2 2 2
+1 1 1 1
+0 0 0 0
+#
+# Loosescan strategy
+#
+set @save_optimizer_switch= @@optimizer_switch;
+set optimizer_switch='materialization=off,firstmatch=off';
+ALTER TABLE t1 ADD KEY b(b);
+EXPLAIN SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+WHERE t1.a=t2.a AND
+t1.b IN (SELECT t4.a FROM t4)
+ORDER BY t2.a DESC, t1.b DESC
+LIMIT 5;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t4 index a a 5 NULL 10 Using where; Using index; LooseScan
+1 PRIMARY t1 ref a,b b 5 test.t4.a 1
+1 PRIMARY <sort-nest> ALL NULL NULL NULL NULL 5 Using filesort
+1 PRIMARY t2 ref a a 5 sort-nest.a 1
+SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+WHERE t1.a=t2.a AND
+t1.b IN (SELECT t4.a FROM t4)
+ORDER BY t2.a DESC, t1.b DESC
+LIMIT 5;
+a a b b
+4 4 4 4
+3 3 3 3
+2 2 2 2
+1 1 1 1
+0 0 0 0
+set @@optimizer_switch= @save_optimizer_switch;
drop table t0,t1,t2,t3,t4;
# NON-MERGED SEMI JOINS
diff --git a/mysql-test/main/sort_nest.test b/mysql-test/main/sort_nest.test
index 5af7fbda7aa..f4392c4e3a0 100644
--- a/mysql-test/main/sort_nest.test
+++ b/mysql-test/main/sort_nest.test
@@ -968,6 +968,43 @@ eval EXPLAIN $query;
eval $query;
set @@optimizer_switch= @save_optimizer_switch;
+
+
+--echo #
+--echo # Semi join materialization lookup
+--echo #
+
+let $query=
+SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+ WHERE t1.a=t2.a AND
+ t1.b IN (SELECT t4.a FROM t3,t4 WHERE t4.a <= 5)
+ORDER BY t2.b DESC, t1.b DESC
+LIMIT 5;
+
+eval EXPLAIN $query;
+eval $query;
+
+--echo #
+--echo # Loosescan strategy
+--echo #
+
+set @save_optimizer_switch= @@optimizer_switch;
+set optimizer_switch='materialization=off,firstmatch=off';
+
+let $query=
+SELECT t1.a, t2.a, t1.b,t2.b
+FROM t1, t2
+ WHERE t1.a=t2.a AND
+ t1.b IN (SELECT t4.a FROM t4)
+ORDER BY t2.a DESC, t1.b DESC
+LIMIT 5;
+
+ALTER TABLE t1 ADD KEY b(b);
+eval EXPLAIN $query;
+eval $query;
+set @@optimizer_switch= @save_optimizer_switch;
+
drop table t0,t1,t2,t3,t4;
--echo