polardbxengine/mysql-test/suite/opt_trace/t/skip_scan.test

68 lines
2.8 KiB
Plaintext

--source include/have_optimizer_trace.inc
let $engine=innodb;
--source include/skip_scan_data.inc
# Trace test
SET optimizer_switch = 'skip_scan=on';
SET optimizer_trace="enabled=on,one_line=off";
# These queries should not do skip scans.
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 2 AND d >= 98 AND e = 2;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%query_references_nonkey_column%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 5 OR b = 2 AND d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%disjuntive_predicate_present%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 5 OR b = 2 OR d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%disjuntive_predicate_present%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 5 OR d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%disjuntive_predicate_present%';
EXPLAIN SELECT a, b, c, d FROM t WHERE ((a = 5 AND b = 2) OR a = 2) and d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%keypart_in_disjunctive_query%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a > 2 AND d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%prefix_not_const_equality%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 2 AND (d >= 98 OR d < 2);
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%range_predicate_too_complex%';
EXPLAIN SELECT a, b, c, d FROM t WHERE a = 2 AND b = 2;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%no_range_predicate%';
EXPLAIN SELECT a, b, c, d FROM t WHERE (a < 1 OR a = 4 OR a = 5) AND b IN (1, 2, 3) AND d >= 98;
SELECT count(*) FROM information_schema.optimizer_trace WHERE trace LIKE '%prefix_not_const_equality%';
# test for EXPLAIN output, query should do skip scan.
EXPLAIN SELECT a, b, c, d FROM t WHERE a IN (1, 2, 3, 4, 5) AND b IN (1, 2, 3) AND d >= 98;
SELECT * FROM information_schema.optimizer_trace;
EXPLAIN SELECT b, c, d FROM t WHERE a = 5 AND c > 4 AND d < 3;
SELECT * FROM information_schema.optimizer_trace;
EXPLAIN SELECT b, c, d FROM t WHERE a = 5 AND d < 3;
SELECT * FROM information_schema.optimizer_trace;
ANALYZE TABLE t UPDATE HISTOGRAM ON d WITH 10 BUCKETS;
EXPLAIN SELECT b FROM t WHERE d < 2;
SELECT * FROM information_schema.optimizer_trace;
SET optimizer_trace="enabled=off";
DROP TABLE t;
SET optimizer_switch = 'skip_scan=on';
SET optimizer_trace="enabled=on,one_line=off";
CREATE TABLE t1 (f1 VARCHAR(10), f2 CHAR(10), f3 INT, KEY(f1, f2, f3));
INSERT INTO t1 VALUES ('a', 'aaaa', 1);
# Skip scan can not be used
EXPLAIN SELECT /*+ SKIP_SCAN(t1) */ count(*) FROM t1 WHERE f1 BETWEEN 'a' and 'a ' AND f3 > 0;
SELECT count(*) FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE WHERE trace LIKE '%prefix_not_const_equality%';
DROP TABLE t1;
SET optimizer_trace="enabled=off";