Skip to content

Commit 049ee29

Browse files
MDEV-37260 Implicitly named query blocks, CREATE VIEW AS supports hints
Query blocks have implicit names, such as `select#1`, formulated by appending their select number to the string `select#`. This patch allows hints to scope their applicability by implicit query block name. For example, SELECT /*+ JOIN_ORDER(@`select#2` t1, t2) */ ... @`select#2` is an implicit query block name. Users can control hint applicability per query block without first naming the blocks with QB_NAME(). Hints may now be specified within VIEWs during their creation and they are applied locally within that VIEW's scope. For example, CREATE VIEW v1 AS SELECT /*+ IGNORE_INDEX(t1 idx1) */ FROM t1 ... GROUP BY ... HAVING ... In many cases and for some parts of the VIEW, the query plan doesn't really depend on how the VIEW is used, so it makes sense to control a part of the query plan from the VIEW definition. Implicit names are not yet supported in VIEWs. Attempting to create a VIEW with an implicit name reference will cause the server to create the VIEW, but it will emit a warning and exclude that hint from the query.
1 parent 2396534 commit 049ee29

23 files changed

+1214
-88
lines changed

client/mysql.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2689,7 +2689,7 @@ static bool add_line(String &buffer, char *line, size_t line_length,
26892689
}
26902690
buffer.length(0);
26912691
}
2692-
else if (!*ml_comment &&
2692+
else if (!*ml_comment && *ss_comment != SSC_HINT &&
26932693
(!*in_string &&
26942694
(inchar == '#' ||
26952695
(inchar == '-' && pos[1] == '-' &&

mysql-test/main/opt_hints.result

Lines changed: 679 additions & 20 deletions
Large diffs are not rendered by default.

mysql-test/main/opt_hints.test

Lines changed: 289 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--source include/have_sequence.inc
12
--enable_prepare_warnings
23
--disable_view_protocol # Since optimizer hints are not supported inside views
34
SET NAMES utf8mb4;
@@ -467,14 +468,14 @@ SELECT /*+ QB_NAME(q1) NO_ICP(@q1 t1 PRIMARY) NO_ICP(@q1 t1 PRIMARY) */ * FROM t
467468
DROP TABLE t1;
468469

469470
--echo #
470-
--echo # Hints inside views are not supported
471+
--echo # Hints inside views are supported
471472
--echo #
472473
CREATE TABLE t1 (a INT, INDEX idx_a(a));
473474
INSERT INTO t1 VALUES (1),(2);
474475

475476
CREATE VIEW v1 AS SELECT /*+ NO_MRR(t1 idx_a) */ a FROM t1;
476477
SELECT * FROM v1;
477-
--echo # Make sure hints are not present inside the view definition:
478+
--echo # Make sure hints are present inside the view definition:
478479
SHOW CREATE VIEW v1;
479480
EXPLAIN EXTENDED SELECT * FROM v1;
480481

@@ -767,3 +768,289 @@ DROP TABLE t2;
767768
--echo #
768769
--echo # End of 12.0 tests
769770
--echo #
771+
772+
--echo #
773+
--echo # MDEV-37260 Hints addressed by implicit query block name
774+
--echo #
775+
776+
--echo # Simple JOIN Query
777+
CREATE TABLE employees (
778+
emp_id INT PRIMARY KEY,
779+
emp_name VARCHAR(100),
780+
department VARCHAR(50)
781+
);
782+
CREATE TABLE salaries (
783+
emp_id INT,
784+
salary DECIMAL(10, 2),
785+
FOREIGN KEY (emp_id) REFERENCES employees(emp_id)
786+
);
787+
INSERT INTO employees (emp_id, emp_name, department) VALUES
788+
(101, 'Alice', 'Engineering'),
789+
(102, 'Bob', 'Engineering'),
790+
(103, 'Charlie', 'Sales'),
791+
(104, 'Diana', 'Sales'),
792+
(105, 'Eve', 'Engineering');
793+
INSERT INTO salaries (emp_id, salary) VALUES
794+
(101, 120000.00),
795+
(102, 95000.00),
796+
(103, 110000.00),
797+
(104, 85000.00),
798+
(105, 130000.00);
799+
800+
EXPLAIN
801+
SELECT /*+ NO_MERGE(s@`select#1`) */ e.emp_name, s.salary FROM employees e JOIN (select * from salaries) s ON e.emp_id = s.emp_id WHERE s.salary > (SELECT AVG(salary) FROM salaries);
802+
803+
EXPLAIN
804+
SELECT /*+ MERGE(s@`select#1`) */ e.emp_name, s.salary FROM employees e JOIN (select * from salaries) s ON e.emp_id = s.emp_id WHERE s.salary > (SELECT AVG(salary) FROM salaries);
805+
--echo # End Simple JOIN Query
806+
807+
--echo # JOIN_ORDER Example
808+
CREATE TABLE ten(a int);
809+
INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
810+
CREATE TABLE twenty(a int);
811+
INSERT INTO twenty SELECT a FROM ten;
812+
INSERT INTO twenty SELECT a+10 FROM ten;
813+
EXPLAIN SELECT /*+ JOIN_ORDER(@`select#2` twenty,ten) */ * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) T;
814+
EXPLAIN SELECT * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) T;
815+
--echo # End JOIN_ORDER Example
816+
817+
--echo # CTE Example
818+
create table t1 (a int, b int, c int);
819+
create table t2 (a int, b int, c int, d decimal);
820+
insert into t1 values
821+
(1,21,345), (1,33,7), (8,33,114), (1,21,500), (1,19,107), (5,14,787),
822+
(8,33,123), (9,10,211), (5,16,207), (1,33,988), (5,27,132), (1,21,104),
823+
(6,20,309), (6,20,315), (1,21,101), (8,33,404), (9,10,800), (1,21,123),
824+
(7,11,708), (6,20,214);
825+
create index t1_a on t1 (a);
826+
insert into t2 values
827+
(2,3,207,207.0000), (1,21,909,12.0000), (7,13,312,406.0000),
828+
(8,64,248,107.0000), (6,20,315,279.3333), (1,19,203,107.0000),
829+
(8,80,800,314.0000), (3,12,231,190.0000), (6,23,303,909.0000);
830+
create view v1 as select a, b, max(c) as max_c, avg(c) as avg_c from t1
831+
group by a,b having max_c < 707;
832+
create table t3 select 2*seq as a, 2*seq+1 as b from seq_0_to_1000;
833+
CREATE TABLE t4 (a INT, b INT);
834+
INSERT INTO t4 VALUES (1,2),(2,3),(3,4);
835+
create table t5 select seq as i, 10*seq as j from seq_1_to_10;
836+
create view v2 as select * from t5;
837+
create table t6 (a int primary key);
838+
insert into t6 select * from seq_1_to_50;
839+
create view v6 as select a from t6 where a mod 2 = 1;
840+
841+
--source include/explain-no-costs.inc
842+
explain format=json with cte as (
843+
select max_c, avg_c from v1,t2 where
844+
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
845+
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a)))
846+
select /*+ NO_DERIVED_CONDITION_PUSHDOWN(v1@`select#2`) */ * from cte;
847+
--echo # End CTE Example
848+
849+
--echo # Recursive CTE Example
850+
explain format=json with recursive cte as (
851+
select max_c, avg_c from v1,t2 where
852+
((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or
853+
((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a))
854+
union
855+
select * from cte where max_c < 100
856+
) select /*+ NO_DERIVED_CONDITION_PUSHDOWN(@`select#2` v1) */ * from cte;
857+
--echo # End Recursive CTE Example
858+
859+
--echo # Deeply nested query block example
860+
--source include/explain-no-costs.inc
861+
explain format=json
862+
select /*+ NO_DERIVED_CONDITION_PUSHDOWN(@`select#5` dv6) */ * from
863+
(select * from
864+
(select * from
865+
(select * from
866+
(select avg_a from
867+
(select avg(a) as avg_a from v6) dv6
868+
) dv4) dv3) dv2) dv1 where avg_a <> 0;
869+
--echo # End deeply nested query block example
870+
871+
--echo # Stored procedure example
872+
DELIMITER |;
873+
CREATE PROCEDURE sp_test_implicit_hint()
874+
BEGIN
875+
EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) */ *
876+
FROM (SELECT * FROM ten) dt;
877+
END|
878+
DELIMITER ;|
879+
CALL sp_test_implicit_hint();
880+
DROP PROCEDURE sp_test_implicit_hint;
881+
882+
DELIMITER |;
883+
CREATE PROCEDURE sp_test_implicit_hint()
884+
BEGIN
885+
EXPLAIN SELECT /*+ MERGE(@`select#1` dt) */ *
886+
FROM (SELECT * FROM ten) dt;
887+
END|
888+
DELIMITER ;|
889+
CALL sp_test_implicit_hint();
890+
DROP PROCEDURE sp_test_implicit_hint;
891+
--echo # End stored procedure example
892+
893+
--echo # Prepared statement example
894+
PREPARE stmt1 FROM 'EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) */ * FROM (SELECT * FROM ten) dt;';
895+
EXECUTE stmt1;
896+
DEALLOCATE PREPARE stmt1;
897+
898+
PREPARE stmt1 FROM 'EXPLAIN SELECT /*+ MERGE(@`select#1` dt) */ * FROM (SELECT * FROM ten) dt;';
899+
EXECUTE stmt1;
900+
DEALLOCATE PREPARE stmt1;
901+
--echo # End prepared statement example.
902+
903+
--echo # INDEX/JOIN_INDEX example
904+
CREATE TABLE t7 (a INT, b INT, c INT, d INT,
905+
KEY i_a(a), KEY i_b(b),
906+
KEY i_ab(a,b), KEY i_c(c), KEY i_d(d));
907+
INSERT INTO t7 VALUES
908+
(1,1,1,1),(2,2,2,1),(3,3,3,1),(4,4,4,1),
909+
(5,5,5,1),(6,6,6,1),(7,7,7,1),(8,8,8,1);
910+
INSERT INTO t7 SELECT a,b, c + 10, d FROM t7;
911+
INSERT INTO t7 SELECT a,b, c + 20, d FROM t7;
912+
INSERT INTO t7 SELECT a,b, c + 40, d FROM t7;
913+
INSERT INTO t7 SELECT a,b, c + 80, d FROM t7;
914+
INSERT INTO t7 SELECT a,b, c + 160, d FROM t7;
915+
ANALYZE TABLE t7;
916+
EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) NO_INDEX(@`select#2` t7) */ * FROM (SELECT a FROM t7 WHERE a > 1 AND a < 3) dt WHERE dt.a = 2;
917+
--echo # End INDEX/JOIN_INDEX example
918+
919+
DROP TABLE salaries, employees, ten, twenty, t1, t2, t3, t4, t5, t6, t7;
920+
DROP VIEW v1, v2, v6;
921+
922+
--echo #
923+
--echo # MDEV-37260 Specifying hints in queries during CREATE VIEW AS
924+
--echo #
925+
CREATE TABLE ten(a int);
926+
INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
927+
CREATE TABLE twenty(a int);
928+
INSERT INTO twenty SELECT a FROM ten;
929+
INSERT INTO twenty SELECT a+10 FROM ten;
930+
931+
--echo # `select#X` in a VIEW example will result in warning
932+
CREATE VIEW v2 AS SELECT /*+ JOIN_ORDER(@`select#3` twenty, ten) */ * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) t;
933+
EXPLAIN SELECT * FROM v2;
934+
SHOW CREATE VIEW v2;
935+
DROP VIEW v2;
936+
--echo # Creating a VIEW with hints otherwise will work
937+
CREATE VIEW v2 AS SELECT /*+ JOIN_ORDER(@qb2 twenty,ten) */ * FROM (SELECT /*+ QB_NAME(qb2) */ ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) t;
938+
EXPLAIN SELECT * FROM v2;
939+
SHOW CREATE VIEW v2;
940+
--echo # This next CREATE VIEW statement should match the output of SHOW CREATE VIEW v2. The following EXPLAIN output should match EXPLAIN SELECT * FROM v2 as a way to demonstrate that the output of SHOW CREATE VIEW is correct.
941+
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select /*+ JOIN_ORDER(@`qb2` `twenty`,`ten`) */ `t`.`a` AS `a` from (select /*+ QB_NAME(`qb2`) */ `ten`.`a` AS `a` from (`ten` join `twenty`) where `ten`.`a` = `twenty`.`a` limit 1000) `t`;
942+
EXPLAIN SELECT * FROM v3;
943+
944+
--echo # Named hint example.
945+
CREATE TABLE t4 (
946+
pk INT PRIMARY KEY,
947+
a INT,
948+
b INT,
949+
c INT,
950+
filler varchar(100),
951+
key(a,b,c)
952+
) engine=myisam;
953+
954+
INSERT INTO t4 SELECT seq, seq, seq, seq, 'hello' FROM seq_1_to_10000;
955+
CREATE VIEW v5 AS SELECT /*+ NO_ICP(t4) */ * FROM t4 WHERE a < 10 AND (b+1>3);
956+
FLUSH STATUS;
957+
SELECT * FROM information_schema.session_status WHERE variable_name= 'handler_icp_match';
958+
SELECT * FROM v5;
959+
SELECT * FROM information_schema.session_status WHERE variable_name= 'handler_icp_match';
960+
EXPLAIN SELECT * from v5;
961+
--echo # End named hint example.
962+
963+
--echo # JOIN of VIEW with table where the local hint in the VIEW specifies NO_ICP and is JOIN'd with the same table allowing ICP.
964+
EXPLAIN SELECT * FROM t4 x, t4 y WHERE x.a < 10 AND (x.b+1>3) AND y.a < 10 AND (y.b+1>3);
965+
EXPLAIN SELECT * FROM t4 x, v5 y WHERE x.a < 10 AND (x.b+1>3);
966+
EXPLAIN SELECT * FROM v5 x, t4 y WHERE y.a < 10 AND (y.b+1>3);
967+
EXPLAIN SELECT * FROM v5 x, v5 y;
968+
--echo # End of JOIN of VIEW with table where the local hint in the VIEW specifies NO_ICP and is JOIN'd with the same table allowing ICP.
969+
970+
--echo # INDEX/JOIN_INDEX example
971+
CREATE TABLE t7 (a INT, b INT, c INT, d INT,
972+
KEY i_a(a), KEY i_b(b),
973+
KEY i_ab(a,b), KEY i_c(c), KEY i_d(d));
974+
INSERT INTO t7 VALUES
975+
(1,1,1,1),(2,2,2,1),(3,3,3,1),(4,4,4,1),
976+
(5,5,5,1),(6,6,6,1),(7,7,7,1),(8,8,8,1);
977+
INSERT INTO t7 SELECT a,b, c + 10, d FROM t7;
978+
INSERT INTO t7 SELECT a,b, c + 20, d FROM t7;
979+
INSERT INTO t7 SELECT a,b, c + 40, d FROM t7;
980+
INSERT INTO t7 SELECT a,b, c + 80, d FROM t7;
981+
INSERT INTO t7 SELECT a,b, c + 160, d FROM t7;
982+
ANALYZE TABLE t7;
983+
CREATE VIEW v7 AS SELECT /*+ NO_MERGE(dt) NO_INDEX(@qb t7) */ * FROM (SELECT /*+ QB_NAME(qb) */ a FROM t7 WHERE a > 1 AND a < 3) dt WHERE dt.a = 2;
984+
EXPLAIN SELECT * FROM v7;
985+
SHOW CREATE VIEW v7;
986+
--echo # End INDEX/JOIN_INDEX example
987+
988+
--echo # Example of many nested derived tables are not merged.
989+
EXPLAIN SELECT /*+ NO_MERGE(da) */ * FROM (SELECT /*+ NO_MERGE(db) */ * FROM (SELECT /*+ NO_MERGE(dc) */ * FROM (SELECT /*+ NO_MERGE(dd) */ * FROM (SELECT /*+ NO_MERGE(de) */ * FROM (SELECT /*+ NO_MERGE(df) */ * FROM (SELECT /*+ NO_MERGE(dg) */ * FROM (SELECT /*+ NO_MERGE(dh) */ * FROM (SELECT /*+ NO_MERGE(di) */ * FROM (SELECT /*+ NO_MERGE(dj) */ * FROM (SELECT /*+ NO_MERGE(dk) */ * FROM (SELECT /*+ NO_MERGE(dl) */ * FROM (SELECT * FROM ten) dl) dk) dj) di) dh) dg) df) de) dd) dc) db) da;
990+
991+
EXPLAIN SELECT /*+ NO_MERGE(da@`select#1`) */ * FROM (SELECT /*+ NO_MERGE(db@`select#2`) */ * FROM (SELECT /*+ NO_MERGE(dc@`select#3`) */ * FROM (SELECT /*+ NO_MERGE(dd@`select#4`) */ * FROM (SELECT /*+ NO_MERGE(de@`select#5`) */ * FROM (SELECT /*+ NO_MERGE(df@`select#6`) */ * FROM (SELECT /*+ NO_MERGE(dg@`select#7`) */ * FROM (SELECT /*+ NO_MERGE(dh@`select#8`) */ * FROM (SELECT /*+ NO_MERGE(di@`select#9`) */ * FROM (SELECT /*+ NO_MERGE(dj@`select#10`) */ * FROM (SELECT /*+ NO_MERGE(dk@`select#11`) */ * FROM (SELECT /*+ NO_MERGE(dl@`select#12`) */ * FROM (SELECT * FROM ten) dl) dk) dj) di) dh) dg) df) de) dd) dc) db) da;
992+
--echo # End example of many nested derived tables are not merged.
993+
994+
--echo # Example of VIEW hints displaying properly in warning note
995+
CREATE TABLE t1 ( a int, b int);
996+
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_10;
997+
CREATE TABLE t2 AS SELECT * from t1;
998+
ALTER TABLE t2 ADD INDEX(a);
999+
CREATE VIEW v23 AS SELECT /*+ NO_INDEX(t2 a) */ * FROM t2 WHERE a<2;
1000+
SHOW CREATE VIEW v23;
1001+
EXPLAIN EXTENDED SELECT * FROM v23;
1002+
EXPLAIN EXTENDED SELECT /*+ NO_MERGE(du) */ * FROM (SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * from v23) dt) du;
1003+
--echo # merged view will retain v23 in note
1004+
EXPLAIN EXTENDED SELECT /*+ NO_MERGE(v23) */ * FROM v23;
1005+
1006+
CREATE VIEW v24 AS SELECT /*+ INDEX(`t2` `a`) */ `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` where `t2`.`a` < 2;
1007+
SHOW CREATE VIEW v24;
1008+
EXPLAIN EXTENDED SELECT * FROM v24;
1009+
EXPLAIN EXTENDED SELECT /*+ NO_MERGE(du) */ * FROM (SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * from v24) dt) du;
1010+
--echo # merged view will retain v24 in note
1011+
EXPLAIN EXTENDED SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM v24) dt;
1012+
--echo # End example of VIEW hints displaying properly in warning note
1013+
1014+
--echo # INSERT example without and with VIEW
1015+
EXPLAIN EXTENDED INSERT INTO ten SELECT /*+ NO_MERGE(dv) NO_BNL(@qb) */ 100*COUNT(dv.a) AS a FROM ( SELECT /*+ QB_NAME(qb) */ dt.a AS a FROM ten dt, ten du WHERE dt.a % 2 = 1 ) dv WHERE dv.a = 3;
1016+
CREATE VIEW v25 AS SELECT /*+ NO_MERGE(dv) NO_BNL(@qb) */ 100*COUNT(dv.a) AS a FROM ( SELECT /*+ QB_NAME(qb) */ dt.a AS a FROM ten dt, ten du WHERE dt.a % 2 = 1 ) dv WHERE dv.a = 3;
1017+
--echo # merged view will retail qb name reference in the note
1018+
EXPLAIN EXTENDED INSERT INTO ten SELECT * FROM v25;
1019+
--echo # End INSERT example without and with VIEW
1020+
1021+
--echo # CTE JOIN'd with itself
1022+
EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ NO_INDEX(t7@`select#2`) NO_INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2;
1023+
EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ NO_INDEX(t7@`select#2`) INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2;
1024+
EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ INDEX(t7@`select#2`) NO_INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2;
1025+
EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ INDEX(t7@`select#2`) INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2;
1026+
--echo # End CTE JOIN'd with itself
1027+
1028+
DROP TABLE ten, twenty, t1, t2, t4, t7;
1029+
DROP VIEW v2, v3, v5, v7, v23, v24, v25;
1030+
1031+
--echo # Examples from QA
1032+
--echo # MAX_EXECUTION_TIME not allowed in VIEWs, allowed only at top level SELECT.
1033+
CREATE TABLE t1 (a INT, b VARCHAR(300));
1034+
INSERT INTO t1 VALUES (1, 'string');
1035+
SELECT /*+ MAX_EXECUTION_TIME(10) */* FROM t1 a, t1 b;
1036+
CREATE VIEW v1 AS SELECT /*+ MAX_EXECUTION_TIME(10) */ a.a, b.b FROM t1 a, t1 b;
1037+
DROP VIEW v1;
1038+
DROP TABLE t1;
1039+
1040+
--echo # Hint within subquery not honored.
1041+
CREATE TABLE t1 (i int);
1042+
INSERT INTO t1 VALUES (1),(2);
1043+
EXPLAIN EXTENDED
1044+
SELECT *
1045+
FROM ( SELECT /*+ DERIVED_CONDITION_PUSHDOWN(sq1)*/* FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2
1046+
WHERE f = 1;
1047+
CREATE VIEW v1 AS SELECT *
1048+
FROM ( SELECT /*+ DERIVED_CONDITION_PUSHDOWN(sq1)*/* FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2
1049+
WHERE f = 1;
1050+
EXPLAIN EXTENDED SELECT * FROM v1;
1051+
SHOW CREATE VIEW v1;
1052+
DROP TABLE t1;
1053+
DROP VIEW v1;
1054+
--echo # End Examples from QA
1055+
1056+
--echo # End of 12.2 tests

mysql-test/main/opt_hints_derived_condition_pushdown.test

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
--source include/have_sequence.inc
2-
--disable_view_protocol
32
create table t1 (a int, b int, c int);
43
create table t2 (a int, b int, c int, d decimal);
54
insert into t1 values
@@ -414,4 +413,3 @@ explain extended select /*+ NO_MERGE(t) NO_ICP(t) */ * from (select * from t7) t
414413

415414
drop view v1, v2, v6;
416415
drop table t1, t2, t3, t4, t5, t6, t7;
417-
--enable_view_protocol

mysql-test/main/opt_hints_index.test

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
--enable_prepare_warnings
2-
--disable_view_protocol # Since optimizer hints are not supported inside views
32

43
CREATE TABLE t1 (a INT, b INT, c INT, d INT,
54
KEY i_a(a), KEY i_b(b),

mysql-test/main/opt_hints_join_cache.test

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
--disable_view_protocol # Since optimizer hints are not supported inside views
21

32
set @tmp_jcl= @@join_cache_level;
43
set @tmp_opt= @@optimizer_switch;

mysql-test/main/opt_hints_join_order.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
14511451
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 33.33 Using where; Using join buffer (flat, BNL join)
14521452
Warnings:
14531453
Warning 4219 Hint JOIN_FIXED_ORDER() is ignored as conflicting/duplicated
1454-
Note 1003 insert into `test`.`tn`(fn_1,fn_2) select /*+ JOIN_ORDER(@`select#2` `t2`,`t1`) */ `test`.`t1`.`f1` AS `f1`,`test`.`t2`.`f2` AS `f2` from `test`.`t2` join `test`.`t1` where `test`.`t1`.`id` = `test`.`t2`.`id` order by `test`.`t1`.`f1`,`test`.`t2`.`f2`
1454+
Note 1003 insert into `test`.`tn`(fn_1,fn_2) select /*+ JOIN_ORDER(@`select#1` `t2`,`t1`) */ `test`.`t1`.`f1` AS `f1`,`test`.`t2`.`f2` AS `f2` from `test`.`t2` join `test`.`t1` where `test`.`t1`.`id` = `test`.`t2`.`id` order by `test`.`t1`.`f1`,`test`.`t2`.`f2`
14551455
EXPLAIN EXTENDED
14561456
INSERT INTO tn (fn_1, fn_2)
14571457
SELECT /*+ JOIN_ORDER(t1,t2) */ f1,f2 FROM t2 LEFT JOIN t1 ON t1.id=t2.id

mysql-test/main/opt_hints_join_order.test

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
--source include/have_innodb.inc
22
--source include/innodb_stable_estimates.inc
33
--enable_prepare_warnings
4-
--disable_view_protocol # Since optimizer hints are not supported inside views
54

65
set default_storage_engine=innodb;
76

@@ -258,7 +257,9 @@ let $query= SELECT /*+ QB_NAME(q1) JOIN_ORDER(t2, t1) */ STRAIGHT_JOIN count(*)
258257
FROM t1 JOIN t2 JOIN t3
259258
WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)
260259
AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);
260+
--disable_view_protocol
261261
eval $query;
262+
--enable_view_protocol
262263
eval explain extended $query;
263264

264265
--echo # Test JOIN_FIXED_ORDER.
@@ -798,15 +799,19 @@ SELECT
798799
COUNT(*) FROM t1 JOIN t2 AS ta3 JOIN t2 AS ta4
799800
WHERE ta4.f1 IN (SELECT /*+ QB_NAME(qb1) */ f1 FROM t4) AND
800801
ta3.f2 IN (SELECT /*+ QB_NAME(qb2) */ f2 FROM t2);
802+
--disable_view_protocol
801803
eval $query;
804+
--enable_view_protocol
802805
eval explain extended $query;
803806

804807
let $query=
805808
SELECT /*+ JOIN_PREFIX(t2@qb2, t4@qb1, ta3, ta4) */
806809
COUNT(*) FROM t1 JOIN t2 AS ta3 JOIN t2 AS ta4
807810
WHERE ta4.f1 IN (SELECT /*+ QB_NAME(qb1) */ f1 FROM t4) AND
808811
ta3.f2 IN (SELECT /*+ QB_NAME(qb2) */ f2 FROM t2);
812+
--disable_view_protocol
809813
eval $query;
814+
--enable_view_protocol
810815
eval explain extended $query;
811816

812817
DROP TABLE t1, t2, t4;

0 commit comments

Comments
 (0)