mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
c08de06246
- "ANALYZE $stmt" should discard select's output, but it should still evaluate the output columns (otherwise, subqueries in select list are not executed) - SHOW EXPLAIN's code practice of calling JOIN::save_explain_data() after JOIN::exec() is disastrous for ANALYZE, because it resets all counters after the first execution. It is stopped = "Late" test_if_skip_sort_order() calls explicitly update their part of the query plan. = Also, I had to rewrite I_S optimization to actually have optimization and execution stages.
62 lines
1.7 KiB
Text
62 lines
1.7 KiB
Text
#
|
|
# Tests for "ANALYZE $statement" feature (PostgreSQL's analog is called EXPLAIN ANALYZE)
|
|
#
|
|
--disable_warnings
|
|
drop table if exists t0,t1,t2,t3;
|
|
--enable_warnings
|
|
|
|
create table t0 (a int) engine=myisam;
|
|
INSERT INTO t0 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
|
|
create table t1 (a int) engine=myisam;
|
|
INSERT INTO t1 select * from t0;
|
|
|
|
--echo # Try a few basic selects to see that r_rows and r_filtered columns work
|
|
analyze select * from t1;
|
|
analyze select * from t1 where a<5;
|
|
analyze select * from t1 where a>100;
|
|
|
|
--echo # ANALYZE DELETE will delete rows:
|
|
analyze delete from t1 where a in (2,3,4);
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
--echo # ANALYZE UPDATE will make updates:
|
|
create table t1(a int, b int);
|
|
insert into t1 select a,a from t0;
|
|
analyze update t1 set b=100+b where a in (6,7,8);
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
--echo # Check that UNION works
|
|
create table t1(a int, b int);
|
|
insert into t1 select a,a from t0;
|
|
analyze (select * from t1 A where a<5) union (select * from t1 B where a in (5,6));
|
|
analyze (select * from t1 A where a<5) union (select * from t1 B where a in (1,2));
|
|
drop table t1;
|
|
drop table t0;
|
|
|
|
--echo #
|
|
--echo # Try a subquery.
|
|
--echo #
|
|
create table t0 (a int, b int);
|
|
insert into t0 values
|
|
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
|
|
|
create table t1 (a int, b int);
|
|
insert into t1 values (1,1),(2,2),(3,3);
|
|
|
|
#
|
|
# t1 t0
|
|
# a=1 (0,1) 2 rows
|
|
# a=2 (0,1,2) 3 rows
|
|
# a=3 (0,1,2,3) 4 rows
|
|
#
|
|
# TOTAL TOTAL= 9 rows. 3 executions, avg=3 rows.
|
|
# WHERE is satisfied for 1 row per query, which gives filtered=33.3
|
|
|
|
--echo # See .test file for the right values of r_rows and r_filtered.
|
|
analyze select a, a in (select t0.b from t0 where t0.b+1=t1.b+1) from t1;
|
|
|
|
drop table t0,t1;
|
|
|