mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merged the implementation of MDEV-28 LIMIT ROWS EXAMINED into MariaDB 5.5.
This commit is contained in:
852
mysql-test/r/limit_rows_examined.result
Normal file
852
mysql-test/r/limit_rows_examined.result
Normal file
@ -0,0 +1,852 @@
|
||||
set @save_join_cache_level = @@join_cache_level;
|
||||
create table t1 (c1 char(2));
|
||||
create table t2 (c2 char(2));
|
||||
insert into t1 values ('bb'), ('cc'), ('aa'), ('dd');
|
||||
insert into t2 values ('bb'), ('cc'), ('dd'), ('ff');
|
||||
create table t1i (c1 char(2) key);
|
||||
create table t2i (c2 char(2) key);
|
||||
insert into t1i values ('bb'), ('cc'), ('aa'), ('dd');
|
||||
insert into t2i values ('bb'), ('cc'), ('dd'), ('ff');
|
||||
=========================================================================
|
||||
Simple joins
|
||||
=========================================================================
|
||||
Simple nested loops join without blocking
|
||||
set @@join_cache_level=0;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 2;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1i index PRIMARY PRIMARY 2 NULL 4 Using index
|
||||
1 SIMPLE t2i eq_ref PRIMARY PRIMARY 2 test.t1i.c1 1 Using index
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete.
|
||||
Blocked nested loops join, empty result set because of blocking
|
||||
set @@join_cache_level=1;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where; Using join buffer (flat, BNL join)
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1i index PRIMARY PRIMARY 2 NULL 4 Using index
|
||||
1 SIMPLE t2i index PRIMARY PRIMARY 2 NULL 4 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
set @@join_cache_level=6;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 hash_ALL NULL #hash#$hj 3 test.t1.c1 4 Using where; Using join buffer (flat, BNLH join)
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3;
|
||||
c1 c2
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 4 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1i index PRIMARY PRIMARY 2 NULL 4 Using index
|
||||
1 SIMPLE t2i index PRIMARY PRIMARY 2 NULL 4 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
Mix LIMIT ROWS EXAMINED with LIMIT
|
||||
set @@join_cache_level=0;
|
||||
explain
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1 ROWS EXAMINED 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1 ROWS EXAMINED 4;
|
||||
c1 c2
|
||||
bb cc
|
||||
explain
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1,1 ROWS EXAMINED 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1,1 ROWS EXAMINED 4;
|
||||
c1 c2
|
||||
bb dd
|
||||
Empty table optimized away during constant optimization
|
||||
create table t0 (c0 int);
|
||||
explain
|
||||
select * from t0 LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 system NULL NULL NULL NULL 0 const row not found
|
||||
explain
|
||||
select * from t0 LIMIT ROWS EXAMINED 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 system NULL NULL NULL NULL 0 const row not found
|
||||
select * from t0 LIMIT ROWS EXAMINED 1;
|
||||
c0
|
||||
drop table t0;
|
||||
create table t0 (c0 char(2) primary key);
|
||||
insert into t0 values ('bb'), ('cc'), ('aa');
|
||||
explain
|
||||
select * from t0 where c0 = 'bb' LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 const PRIMARY PRIMARY 2 const 1 Using index
|
||||
select * from t0 where c0 = 'bb' LIMIT ROWS EXAMINED 0;
|
||||
c0
|
||||
bb
|
||||
explain
|
||||
select * from t0, t1 where c0 = 'bb' and c1 > c0 LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 const PRIMARY PRIMARY 2 const 1 Using index
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t0, t1 where c0 = 'bb' and c1 > c0 LIMIT ROWS EXAMINED 0;
|
||||
c0 c1
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 2 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
set @@join_cache_level = @save_join_cache_level;
|
||||
drop table t0;
|
||||
=========================================================================
|
||||
LIMIT ROWS EXAMINED with parameter argument
|
||||
=========================================================================
|
||||
set @@join_cache_level=0;
|
||||
set @l = 2;
|
||||
Prepared statement parameter
|
||||
prepare st1 from "select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED ?";
|
||||
execute st1 using @l;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
deallocate prepare st1;
|
||||
User variable (not supported for LIMIT in MariaDB 5.3/MySQL 5.1)
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED @l;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@l' at line 1
|
||||
Stored procedure parameter
|
||||
create procedure test_limit_rows(l int)
|
||||
begin
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED l;
|
||||
end|
|
||||
call test_limit_rows(3);
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 4 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete.
|
||||
drop procedure test_limit_rows;
|
||||
set @@join_cache_level = @save_join_cache_level;
|
||||
=========================================================================
|
||||
UNIONs (with several LIMIT ROWS EXAMINED clauses)
|
||||
=========================================================================
|
||||
(select * from t1, t2 where c1 = c2)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2) LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6);
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0
|
||||
UNION
|
||||
select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT 1 ROWS EXAMINED 6;
|
||||
c1 c2
|
||||
bb bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT 2 ROWS EXAMINED 10;
|
||||
c1 c2
|
||||
bb bb
|
||||
cc cc
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (10). The query result may be incomplete.
|
||||
=========================================================================
|
||||
Subqueries (with several LIMIT ROWS EXAMINED clauses)
|
||||
=========================================================================
|
||||
Subqueries, semi-join
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 11);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 2 func 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 11);
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 2 func 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 2 func 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1i index PRIMARY PRIMARY 2 NULL 4 Using where; Using index
|
||||
1 PRIMARY t2i index PRIMARY PRIMARY 2 NULL 4 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
Subqueries with IN-TO-EXISTS
|
||||
set @@optimizer_switch='semijoin=off,in_to_exists=on,materialization=off';
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 4);
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 9;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1i index NULL PRIMARY 2 NULL 4 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t2i unique_subquery PRIMARY PRIMARY 2 func 1 Using index; Using where
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 9;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 10 rows, which exceeds LIMIT ROWS EXAMINED (9). The query result may be incomplete.
|
||||
Same as above, without subquery cache
|
||||
set @@optimizer_switch='subquery_cache=off';
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 2);
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 2;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 2;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 5;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
Subqueries with materialization
|
||||
set @@optimizer_switch='semijoin=off,in_to_exists=off,materialization=on,subquery_cache=on';
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 13;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 13;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete.
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1i index NULL PRIMARY 2 NULL 4 Using where; Using index
|
||||
2 MATERIALIZED t2i index PRIMARY PRIMARY 2 NULL 4 Using where; Using index
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (17). The query result may be incomplete.
|
||||
set @@optimizer_switch='default';
|
||||
=========================================================================
|
||||
Views and derived tables
|
||||
=========================================================================
|
||||
create view v1 as
|
||||
select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'LIMIT ROWS EXAMINED inside views'
|
||||
create view v1 as
|
||||
select * from t1 where c1 IN (select * from t2 where c2 > ' ');
|
||||
select * from v1;
|
||||
c1
|
||||
bb
|
||||
cc
|
||||
dd
|
||||
select * from v1 LIMIT ROWS EXAMINED 17;
|
||||
c1
|
||||
bb
|
||||
cc
|
||||
dd
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (17). The query result may be incomplete.
|
||||
select * from v1 LIMIT ROWS EXAMINED 16;
|
||||
c1
|
||||
bb
|
||||
cc
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (16). The query result may be incomplete.
|
||||
select * from v1 LIMIT ROWS EXAMINED 11;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete.
|
||||
drop view v1;
|
||||
explain
|
||||
select *
|
||||
from (select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)) as tmp
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select *
|
||||
from (select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)) as tmp
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
c1
|
||||
bb
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete.
|
||||
=========================================================================
|
||||
Aggregation
|
||||
=========================================================================
|
||||
create table t3 (c1 char(2), c2 int);
|
||||
insert into t3 values
|
||||
('aa', 1), ('aa', 2),
|
||||
('bb', 3), ('bb', 4), ('bb', 5);
|
||||
explain
|
||||
select c1, sum(c2) from t3 group by c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
|
||||
select c1, sum(c2) from t3 group by c1;
|
||||
c1 sum(c2)
|
||||
aa 3
|
||||
bb 12
|
||||
explain
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 0;
|
||||
c1 sum(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 2 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 1;
|
||||
ERROR HY000: Sort aborted:
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 20;
|
||||
c1 sum(c2)
|
||||
aa 3
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 21 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete.
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 21;
|
||||
c1 sum(c2)
|
||||
aa 3
|
||||
bb 12
|
||||
create table t3i (c1 char(2), c2 int);
|
||||
create index it3i on t3i(c1);
|
||||
create index it3j on t3i(c2,c1);
|
||||
insert into t3i values
|
||||
('aa', 1), ('aa', 2),
|
||||
('bb', 3), ('bb', 4), ('bb', 5);
|
||||
explain
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3i index NULL it3j 8 NULL 5 Using index; Using temporary; Using filesort
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 0;
|
||||
c1 sum(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 2 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 1;
|
||||
ERROR HY000: Sort aborted:
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 20;
|
||||
c1 sum(c2)
|
||||
aa 3
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 21 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete.
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 21;
|
||||
c1 sum(c2)
|
||||
aa 3
|
||||
bb 12
|
||||
Aggregation without grouping
|
||||
explain
|
||||
select min(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5
|
||||
select min(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
min(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
select max(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
max(c2)
|
||||
5
|
||||
select max(c2) from t3 LIMIT ROWS EXAMINED 0;
|
||||
max(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
explain
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5 Using where
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
max(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6;
|
||||
max(c2)
|
||||
NULL
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 0;
|
||||
max(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
explain
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
count(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
count(c2)
|
||||
5
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 0;
|
||||
count(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
explain
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5 Using where
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
count(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6;
|
||||
count(c2)
|
||||
0
|
||||
explain
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
sum(c2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete.
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
sum(c2)
|
||||
15
|
||||
The query result is found during optimization, LIMIT ROWS EXAMINED has no effect.
|
||||
explain
|
||||
select max(c1) from t3i LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
select max(c1) from t3i LIMIT ROWS EXAMINED 0;
|
||||
max(c1)
|
||||
bb
|
||||
create table t3_empty like t3;
|
||||
explain
|
||||
select max(c1) from t3_empty LIMIT ROWS EXAMINED 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3_empty system NULL NULL NULL NULL 0 const row not found
|
||||
select max(c1) from t3_empty LIMIT ROWS EXAMINED 0;
|
||||
max(c1)
|
||||
NULL
|
||||
drop table t3_empty;
|
||||
=========================================================================
|
||||
Sorting
|
||||
=========================================================================
|
||||
explain
|
||||
select c1, c2 from t3 order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 5 Using filesort
|
||||
select c1, c2 from t3 order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
ERROR HY000: Sort aborted:
|
||||
explain
|
||||
select c1, c2 from t3i order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3i index NULL it3j 8 NULL 5 Using index
|
||||
select c1, c2 from t3i order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
c1 c2
|
||||
aa 1
|
||||
aa 2
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete.
|
||||
explain
|
||||
select c1, c2 from t3i order by c2, c1 desc LIMIT ROWS EXAMINED 2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3i index NULL it3j 8 NULL 5 Using index; Using filesort
|
||||
select c1, c2 from t3i order by c2, c1 desc LIMIT ROWS EXAMINED 2;
|
||||
ERROR HY000: Sort aborted:
|
||||
drop table t3,t3i;
|
||||
=========================================================================
|
||||
INSERT/DELETE/UPDATE
|
||||
=========================================================================
|
||||
INSERT ... SELECT
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
INSERT INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 0;
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 2 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete.
|
||||
select * from t4;
|
||||
a
|
||||
1
|
||||
2
|
||||
INSERT INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 6;
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete.
|
||||
select * from t4;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
drop table t4;
|
||||
DELETE - LIMIT ROWS EXAMINED not supported
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
DELETE FROM t4 WHERE t4.a > 0 LIMIT ROWS EXAMINED 0;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXAMINED 0' at line 1
|
||||
DELETE FROM t4 WHERE t4.a > 0 LIMIT 0 ROWS EXAMINED 0;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXAMINED 0' at line 1
|
||||
drop table t4;
|
||||
UPDATE - LIMIT ROWS EXAMINED not supported
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
update t4 set a=a+10 LIMIT ROWS EXAMINED 0;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXAMINED 0' at line 1
|
||||
update t4 set a=a+10 LIMIT 0 ROWS EXAMINED 0;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXAMINED 0' at line 1
|
||||
drop table t4;
|
||||
drop table t1,t2,t1i,t2i;
|
||||
=========================================================================
|
||||
Test cases for bugs
|
||||
=========================================================================
|
||||
|
||||
MDEV-115
|
||||
|
||||
SET @@optimizer_switch='in_to_exists=on,outer_join_with_cache=on';
|
||||
CREATE TABLE t1 ( a VARCHAR(3) ) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('USA');
|
||||
CREATE TABLE t2 ( b INT );
|
||||
INSERT INTO t2 VALUES (3899),(3914),(3888);
|
||||
CREATE TABLE t3 ( c VARCHAR(33), d INT );
|
||||
INSERT INTO t3 VALUES ('USASpanish',8),('USATagalog',0),('USAVietnamese',0);
|
||||
EXPLAIN
|
||||
SELECT DISTINCT a AS field1 FROM t1, t2
|
||||
WHERE EXISTS (SELECT c FROM t3 LEFT JOIN t2 ON b = d)
|
||||
HAVING field1 > 'aaa' LIMIT ROWS EXAMINED 20;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 1 Using temporary
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 Distinct
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 3
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
SELECT DISTINCT a AS field1 FROM t1, t2
|
||||
WHERE EXISTS (SELECT c FROM t3 LEFT JOIN t2 ON b = d)
|
||||
HAVING field1 > 'aaa' LIMIT ROWS EXAMINED 20;
|
||||
field1
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 23 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete.
|
||||
EXPLAIN
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1 Using temporary
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Distinct
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14;
|
||||
a
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 15 rows, which exceeds LIMIT ROWS EXAMINED (14). The query result may be incomplete.
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 15;
|
||||
a
|
||||
USA
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 16 rows, which exceeds LIMIT ROWS EXAMINED (15). The query result may be incomplete.
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 16;
|
||||
a
|
||||
USA
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 17 rows, which exceeds LIMIT ROWS EXAMINED (16). The query result may be incomplete.
|
||||
drop table t1,t2,t3;
|
||||
set @@optimizer_switch='default';
|
||||
|
||||
MDEV-153
|
||||
|
||||
CREATE TABLE t1 ( a TIME, b DATETIME, KEY(a), KEY(b) ) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES
|
||||
('21:22:34.025509', '2002-02-13 17:30:06.013935'),
|
||||
('10:50:38.059966', '2008-09-27 00:34:58.026613'),
|
||||
('00:21:38.058143', '2007-05-28 00:00:00');
|
||||
CREATE TABLE t2 ( c INT, d TIME, e DATETIME, f VARCHAR(1), KEY(c) ) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES
|
||||
(0, '11:03:22.062907', '2007-06-02 11:16:01.053212', 'a'),
|
||||
(0, '08:14:05.001407', '1900-01-01 00:00:00', 'm'),
|
||||
(5, '19:03:16.024974', '1900-01-01 00:00:00', 'f'),
|
||||
(1, '07:23:34.034234', '2000-11-26 05:01:11.054228', 'z'),
|
||||
(6, '12:29:32.019411', '2006-02-13 00:00:00', 'f'),
|
||||
(6, '06:07:10.010496', '2007-06-08 04:35:26.020373', 'a'),
|
||||
(7, '22:55:09.020772', '2005-04-27 00:00:00', 'i');
|
||||
EXPLAIN
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 120;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using temporary; Using filesort
|
||||
1 PRIMARY alias2 ALL NULL NULL NULL NULL 7 Using join buffer (flat, BNL join)
|
||||
1 PRIMARY alias3 index NULL c 5 NULL 7 Using where; Using index; Using join buffer (incremental, BNL join)
|
||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
||||
FLUSH STATUS;
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 120;
|
||||
ERROR HY000: Sort aborted:
|
||||
SHOW STATUS LIKE 'Handler_read%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 4
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_deleted 0
|
||||
Handler_read_rnd_next 52
|
||||
SHOW STATUS LIKE 'Handler_tmp%';
|
||||
Variable_name Value
|
||||
Handler_tmp_update 0
|
||||
Handler_tmp_write 66
|
||||
FLUSH STATUS;
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 250;
|
||||
field1 field2 field3 field4 field5
|
||||
00:21:38 06:07:10 a 2007-06-08 04:35:26 2007-05-28 00:00:00
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 251 rows, which exceeds LIMIT ROWS EXAMINED (250). The query result may be incomplete.
|
||||
SHOW STATUS LIKE 'Handler_read%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 5
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 2
|
||||
Handler_read_rnd_deleted 1
|
||||
Handler_read_rnd_next 110
|
||||
SHOW STATUS LIKE 'Handler_tmp%';
|
||||
Variable_name Value
|
||||
Handler_tmp_update 0
|
||||
Handler_tmp_write 133
|
||||
drop table t1, t2;
|
||||
|
||||
MDEV-161 LIMIT_ROWS EXAMINED: query with the limit and NOT EXISTS, without GROUP BY or aggregate,
|
||||
returns rows, while the same query without the limit returns empty set
|
||||
|
||||
CREATE TABLE t1 ( a INT, b INT );
|
||||
INSERT INTO t1 VALUES (3911,17),(3847,33),(3857,26);
|
||||
CREATE TABLE t2 ( c VARCHAR(16) );
|
||||
INSERT INTO t2 VALUES ('English'),('French'),('German');
|
||||
CREATE TABLE t3 ( d INT, e VARCHAR(32) );
|
||||
INSERT INTO t3 VALUES (3813,'United States'),(3814,'United States');
|
||||
SELECT * FROM t1 AS alias1, t2 AS alias2
|
||||
WHERE NOT EXISTS (
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t3
|
||||
ON (d = a)
|
||||
WHERE b <= alias1.b OR e != alias2.c
|
||||
);
|
||||
a b c
|
||||
SELECT * FROM t1 AS alias1, t2 AS alias2
|
||||
WHERE NOT EXISTS (
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t3
|
||||
ON (d = a)
|
||||
WHERE b <= alias1.b OR e != alias2.c
|
||||
) LIMIT ROWS EXAMINED 20;
|
||||
a b c
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 25 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete.
|
||||
drop table t1, t2, t3;
|
||||
|
||||
MDEV-174: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*)
|
||||
with subquery in SELECT, constant table, aggregate function
|
||||
|
||||
CREATE TABLE t1 ( a INT );
|
||||
CREATE TABLE t2 ( b INT, c INT, KEY(c) );
|
||||
INSERT INTO t2 VALUES
|
||||
(5, 0),(3, 4),(6, 1),
|
||||
(5, 8),(4, 9),(8, 1);
|
||||
SELECT (SELECT MAX(c) FROM t1, t2)
|
||||
FROM t2
|
||||
WHERE c = (SELECT MAX(b) FROM t2)
|
||||
LIMIT ROWS EXAMINED 3;
|
||||
(SELECT MAX(c) FROM t1, t2)
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 10 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete.
|
||||
drop table t1, t2;
|
||||
|
||||
MDEV-178: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*) on the
|
||||
2nd PS execution, with DISTINCT, FROM subquery or view in SELECT, JOIN in nested subquery
|
||||
|
||||
CREATE TABLE t1 ( a INT );
|
||||
INSERT INTO t1 VALUES (2),(3),(150);
|
||||
CREATE TABLE t2 ( b INT );
|
||||
INSERT INTO t2 VALUES (2),(17),(3),(6);
|
||||
CREATE VIEW v AS
|
||||
SELECT DISTINCT * FROM t1 WHERE a > (SELECT COUNT(*) FROM t1, t2 WHERE a = b);
|
||||
PREPARE ps FROM 'SELECT * FROM v LIMIT ROWS EXAMINED 21';
|
||||
EXECUTE ps;
|
||||
a
|
||||
3
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 22 rows, which exceeds LIMIT ROWS EXAMINED (21). The query result may be incomplete.
|
||||
EXECUTE ps;
|
||||
a
|
||||
3
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 22 rows, which exceeds LIMIT ROWS EXAMINED (21). The query result may be incomplete.
|
||||
drop view v;
|
||||
drop table t1, t2;
|
@ -14,7 +14,7 @@ include/stop_slave.inc
|
||||
# Suspend the INSERT statement in current transaction on SQL thread.
|
||||
# It guarantees that SQL thread is applying the transaction when
|
||||
# STOP SLAVE command launchs.
|
||||
SET GLOBAL debug_dbug= 'd,after_mysql_insert';
|
||||
SET GLOBAL debug_dbug= '+d,after_mysql_insert,*';
|
||||
include/start_slave.inc
|
||||
|
||||
# CREATE TEMPORARY TABLE with InnoDB engine
|
||||
@ -75,7 +75,6 @@ START SLAVE SQL_THREAD;
|
||||
include/wait_for_slave_sql_to_start.inc
|
||||
|
||||
# Test end
|
||||
SET GLOBAL debug_dbug= '$debug_save';
|
||||
include/restart_slave.inc
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
[connection master]
|
||||
@ -96,7 +95,7 @@ CREATE TABLE t1 (c1 INT KEY, c2 INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
[connection master]
|
||||
SET GLOBAL debug_dbug= 'd,dump_thread_wait_before_send_xid';
|
||||
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
||||
[connection slave]
|
||||
include/restart_slave.inc
|
||||
BEGIN;
|
||||
@ -121,5 +120,4 @@ include/wait_for_slave_to_stop.inc
|
||||
include/start_slave.inc
|
||||
[connection master]
|
||||
DROP TABLE t1, t2;
|
||||
SET GLOBAL debug_dbug= $debug_save;
|
||||
include/rpl_end.inc
|
||||
|
@ -23,7 +23,7 @@ source include/stop_slave.inc;
|
||||
--echo # It guarantees that SQL thread is applying the transaction when
|
||||
--echo # STOP SLAVE command launchs.
|
||||
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||
SET GLOBAL debug_dbug= 'd,after_mysql_insert';
|
||||
SET GLOBAL debug_dbug= '+d,after_mysql_insert,*';
|
||||
source include/start_slave.inc;
|
||||
|
||||
--echo
|
||||
@ -44,7 +44,9 @@ source extra/rpl_tests/rpl_stop_slave.test;
|
||||
|
||||
--echo
|
||||
--echo # Test end
|
||||
SET GLOBAL debug_dbug= '$debug_save';
|
||||
--disable_query_log
|
||||
eval SET GLOBAL debug_dbug= '$debug_save';
|
||||
--enable_query_log
|
||||
source include/restart_slave_sql.inc;
|
||||
|
||||
connection slave;
|
||||
@ -76,7 +78,7 @@ sync_slave_with_master;
|
||||
--source include/rpl_connection_master.inc
|
||||
|
||||
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||
SET GLOBAL debug_dbug= 'd,dump_thread_wait_before_send_xid';
|
||||
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
||||
|
||||
--source include/rpl_connection_slave.inc
|
||||
source include/restart_slave_sql.inc;
|
||||
@ -116,5 +118,7 @@ source include/start_slave.inc;
|
||||
|
||||
--source include/rpl_connection_master.inc
|
||||
DROP TABLE t1, t2;
|
||||
SET GLOBAL debug_dbug= $debug_save;
|
||||
--disable_query_log
|
||||
eval SET GLOBAL debug_dbug= '$debug_save';
|
||||
--enable_query_log
|
||||
--source include/rpl_end.inc
|
||||
|
578
mysql-test/t/limit_rows_examined.test
Normal file
578
mysql-test/t/limit_rows_examined.test
Normal file
@ -0,0 +1,578 @@
|
||||
#
|
||||
# Tests for LIMIT ROWS EXAMINED, MDEV-28
|
||||
#
|
||||
|
||||
set @save_join_cache_level = @@join_cache_level;
|
||||
|
||||
create table t1 (c1 char(2));
|
||||
create table t2 (c2 char(2));
|
||||
|
||||
insert into t1 values ('bb'), ('cc'), ('aa'), ('dd');
|
||||
insert into t2 values ('bb'), ('cc'), ('dd'), ('ff');
|
||||
|
||||
create table t1i (c1 char(2) key);
|
||||
create table t2i (c2 char(2) key);
|
||||
|
||||
insert into t1i values ('bb'), ('cc'), ('aa'), ('dd');
|
||||
insert into t2i values ('bb'), ('cc'), ('dd'), ('ff');
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Simple joins
|
||||
--echo =========================================================================
|
||||
|
||||
--echo Simple nested loops join without blocking
|
||||
set @@join_cache_level=0;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 2;
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 2;
|
||||
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4;
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4;
|
||||
|
||||
--echo Blocked nested loops join, empty result set because of blocking
|
||||
set @@join_cache_level=1;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
set @@join_cache_level=6;
|
||||
explain
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3;
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3;
|
||||
|
||||
explain
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
--echo Mix LIMIT ROWS EXAMINED with LIMIT
|
||||
set @@join_cache_level=0;
|
||||
explain
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1 ROWS EXAMINED 4;
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1 ROWS EXAMINED 4;
|
||||
|
||||
explain
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1,1 ROWS EXAMINED 4;
|
||||
select * from t1, t2 where c1 < c2 LIMIT 1,1 ROWS EXAMINED 4;
|
||||
|
||||
--echo Empty table optimized away during constant optimization
|
||||
create table t0 (c0 int);
|
||||
explain
|
||||
select * from t0 LIMIT ROWS EXAMINED 0;
|
||||
explain
|
||||
select * from t0 LIMIT ROWS EXAMINED 1;
|
||||
select * from t0 LIMIT ROWS EXAMINED 1;
|
||||
drop table t0;
|
||||
|
||||
create table t0 (c0 char(2) primary key);
|
||||
insert into t0 values ('bb'), ('cc'), ('aa');
|
||||
|
||||
explain
|
||||
select * from t0 where c0 = 'bb' LIMIT ROWS EXAMINED 0;
|
||||
select * from t0 where c0 = 'bb' LIMIT ROWS EXAMINED 0;
|
||||
|
||||
explain
|
||||
select * from t0, t1 where c0 = 'bb' and c1 > c0 LIMIT ROWS EXAMINED 0;
|
||||
select * from t0, t1 where c0 = 'bb' and c1 > c0 LIMIT ROWS EXAMINED 0;
|
||||
|
||||
set @@join_cache_level = @save_join_cache_level;
|
||||
drop table t0;
|
||||
|
||||
--echo =========================================================================
|
||||
--echo LIMIT ROWS EXAMINED with parameter argument
|
||||
--echo =========================================================================
|
||||
|
||||
set @@join_cache_level=0;
|
||||
set @l = 2;
|
||||
|
||||
--echo Prepared statement parameter
|
||||
|
||||
prepare st1 from "select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED ?";
|
||||
execute st1 using @l;
|
||||
deallocate prepare st1;
|
||||
|
||||
--echo User variable (not supported for LIMIT in MariaDB 5.3/MySQL 5.1)
|
||||
--error 1064
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED @l;
|
||||
|
||||
--echo Stored procedure parameter
|
||||
delimiter |;
|
||||
create procedure test_limit_rows(l int)
|
||||
begin
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED l;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
call test_limit_rows(3);
|
||||
|
||||
drop procedure test_limit_rows;
|
||||
|
||||
set @@join_cache_level = @save_join_cache_level;
|
||||
|
||||
--echo =========================================================================
|
||||
--echo UNIONs (with several LIMIT ROWS EXAMINED clauses)
|
||||
--echo =========================================================================
|
||||
(select * from t1, t2 where c1 = c2)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2) LIMIT ROWS EXAMINED 6;
|
||||
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6);
|
||||
|
||||
select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0
|
||||
UNION
|
||||
select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT 1 ROWS EXAMINED 6;
|
||||
|
||||
(select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0)
|
||||
UNION
|
||||
(select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0)
|
||||
LIMIT 2 ROWS EXAMINED 10;
|
||||
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Subqueries (with several LIMIT ROWS EXAMINED clauses)
|
||||
--echo =========================================================================
|
||||
|
||||
--echo Subqueries, semi-join
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 11);
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 11);
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 6;
|
||||
|
||||
--echo Subqueries with IN-TO-EXISTS
|
||||
set @@optimizer_switch='semijoin=off,in_to_exists=on,materialization=off';
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 4);
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 4);
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 4;
|
||||
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 9;
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 9;
|
||||
|
||||
--echo Same as above, without subquery cache
|
||||
set @@optimizer_switch='subquery_cache=off';
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 2);
|
||||
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 2;
|
||||
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 2;
|
||||
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ')
|
||||
LIMIT ROWS EXAMINED 5;
|
||||
|
||||
--echo Subqueries with materialization
|
||||
set @@optimizer_switch='semijoin=off,in_to_exists=off,materialization=on,subquery_cache=on';
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13;
|
||||
|
||||
explain
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 13;
|
||||
select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)
|
||||
LIMIT ROWS EXAMINED 13;
|
||||
|
||||
explain
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17;
|
||||
select * from t1i
|
||||
where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17;
|
||||
|
||||
set @@optimizer_switch='default';
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Views and derived tables
|
||||
--echo =========================================================================
|
||||
|
||||
--error 1235
|
||||
create view v1 as
|
||||
select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13);
|
||||
|
||||
create view v1 as
|
||||
select * from t1 where c1 IN (select * from t2 where c2 > ' ');
|
||||
|
||||
select * from v1;
|
||||
select * from v1 LIMIT ROWS EXAMINED 17;
|
||||
select * from v1 LIMIT ROWS EXAMINED 16;
|
||||
select * from v1 LIMIT ROWS EXAMINED 11;
|
||||
|
||||
drop view v1;
|
||||
|
||||
explain
|
||||
select *
|
||||
from (select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)) as tmp
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
select *
|
||||
from (select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)) as tmp
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Aggregation
|
||||
--echo =========================================================================
|
||||
create table t3 (c1 char(2), c2 int);
|
||||
|
||||
insert into t3 values
|
||||
('aa', 1), ('aa', 2),
|
||||
('bb', 3), ('bb', 4), ('bb', 5);
|
||||
|
||||
explain
|
||||
select c1, sum(c2) from t3 group by c1;
|
||||
select c1, sum(c2) from t3 group by c1;
|
||||
|
||||
explain
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 0;
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 0;
|
||||
--error 1028
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 1;
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 20;
|
||||
select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 21;
|
||||
|
||||
create table t3i (c1 char(2), c2 int);
|
||||
create index it3i on t3i(c1);
|
||||
create index it3j on t3i(c2,c1);
|
||||
|
||||
insert into t3i values
|
||||
('aa', 1), ('aa', 2),
|
||||
('bb', 3), ('bb', 4), ('bb', 5);
|
||||
|
||||
explain
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 0;
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 0;
|
||||
--error 1028
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 1;
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 20;
|
||||
select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 21;
|
||||
|
||||
--echo Aggregation without grouping
|
||||
|
||||
explain
|
||||
select min(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select min(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select max(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
select max(c2) from t3 LIMIT ROWS EXAMINED 0;
|
||||
|
||||
explain
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6;
|
||||
select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 0;
|
||||
|
||||
explain
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
select count(c2) from t3 LIMIT ROWS EXAMINED 0;
|
||||
|
||||
explain
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5;
|
||||
select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
explain
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 5;
|
||||
select sum(c2) from t3 LIMIT ROWS EXAMINED 6;
|
||||
|
||||
--echo The query result is found during optimization, LIMIT ROWS EXAMINED has no effect.
|
||||
explain
|
||||
select max(c1) from t3i LIMIT ROWS EXAMINED 0;
|
||||
select max(c1) from t3i LIMIT ROWS EXAMINED 0;
|
||||
|
||||
create table t3_empty like t3;
|
||||
explain
|
||||
select max(c1) from t3_empty LIMIT ROWS EXAMINED 0;
|
||||
select max(c1) from t3_empty LIMIT ROWS EXAMINED 0;
|
||||
drop table t3_empty;
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Sorting
|
||||
--echo =========================================================================
|
||||
|
||||
explain
|
||||
select c1, c2 from t3 order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
--error 1028
|
||||
select c1, c2 from t3 order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
|
||||
explain
|
||||
select c1, c2 from t3i order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
select c1, c2 from t3i order by c2, c1 LIMIT ROWS EXAMINED 2;
|
||||
|
||||
explain
|
||||
select c1, c2 from t3i order by c2, c1 desc LIMIT ROWS EXAMINED 2;
|
||||
--error 1028
|
||||
select c1, c2 from t3i order by c2, c1 desc LIMIT ROWS EXAMINED 2;
|
||||
|
||||
drop table t3,t3i;
|
||||
|
||||
--echo =========================================================================
|
||||
--echo INSERT/DELETE/UPDATE
|
||||
--echo =========================================================================
|
||||
|
||||
--echo INSERT ... SELECT
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
INSERT INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 0;
|
||||
select * from t4;
|
||||
INSERT INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 6;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
|
||||
--echo DELETE - LIMIT ROWS EXAMINED not supported
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
--error 1064
|
||||
DELETE FROM t4 WHERE t4.a > 0 LIMIT ROWS EXAMINED 0;
|
||||
--error 1064
|
||||
DELETE FROM t4 WHERE t4.a > 0 LIMIT 0 ROWS EXAMINED 0;
|
||||
drop table t4;
|
||||
|
||||
--echo UPDATE - LIMIT ROWS EXAMINED not supported
|
||||
CREATE TABLE t4 (a int);
|
||||
INSERT INTO t4 values (1), (2);
|
||||
--error 1064
|
||||
update t4 set a=a+10 LIMIT ROWS EXAMINED 0;
|
||||
--error 1064
|
||||
update t4 set a=a+10 LIMIT 0 ROWS EXAMINED 0;
|
||||
drop table t4;
|
||||
|
||||
drop table t1,t2,t1i,t2i;
|
||||
|
||||
|
||||
--echo =========================================================================
|
||||
--echo Test cases for bugs
|
||||
--echo =========================================================================
|
||||
|
||||
--echo
|
||||
--echo MDEV-115
|
||||
--echo
|
||||
|
||||
SET @@optimizer_switch='in_to_exists=on,outer_join_with_cache=on';
|
||||
|
||||
CREATE TABLE t1 ( a VARCHAR(3) ) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('USA');
|
||||
|
||||
CREATE TABLE t2 ( b INT );
|
||||
INSERT INTO t2 VALUES (3899),(3914),(3888);
|
||||
|
||||
CREATE TABLE t3 ( c VARCHAR(33), d INT );
|
||||
INSERT INTO t3 VALUES ('USASpanish',8),('USATagalog',0),('USAVietnamese',0);
|
||||
|
||||
EXPLAIN
|
||||
SELECT DISTINCT a AS field1 FROM t1, t2
|
||||
WHERE EXISTS (SELECT c FROM t3 LEFT JOIN t2 ON b = d)
|
||||
HAVING field1 > 'aaa' LIMIT ROWS EXAMINED 20;
|
||||
|
||||
SELECT DISTINCT a AS field1 FROM t1, t2
|
||||
WHERE EXISTS (SELECT c FROM t3 LEFT JOIN t2 ON b = d)
|
||||
HAVING field1 > 'aaa' LIMIT ROWS EXAMINED 20;
|
||||
|
||||
EXPLAIN
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14;
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14;
|
||||
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 15;
|
||||
SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 16;
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
set @@optimizer_switch='default';
|
||||
|
||||
--echo
|
||||
--echo MDEV-153
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1 ( a TIME, b DATETIME, KEY(a), KEY(b) ) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES
|
||||
('21:22:34.025509', '2002-02-13 17:30:06.013935'),
|
||||
('10:50:38.059966', '2008-09-27 00:34:58.026613'),
|
||||
('00:21:38.058143', '2007-05-28 00:00:00');
|
||||
|
||||
CREATE TABLE t2 ( c INT, d TIME, e DATETIME, f VARCHAR(1), KEY(c) ) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES
|
||||
(0, '11:03:22.062907', '2007-06-02 11:16:01.053212', 'a'),
|
||||
(0, '08:14:05.001407', '1900-01-01 00:00:00', 'm'),
|
||||
(5, '19:03:16.024974', '1900-01-01 00:00:00', 'f'),
|
||||
(1, '07:23:34.034234', '2000-11-26 05:01:11.054228', 'z'),
|
||||
(6, '12:29:32.019411', '2006-02-13 00:00:00', 'f'),
|
||||
(6, '06:07:10.010496', '2007-06-08 04:35:26.020373', 'a'),
|
||||
(7, '22:55:09.020772', '2005-04-27 00:00:00', 'i');
|
||||
|
||||
EXPLAIN
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 120;
|
||||
|
||||
FLUSH STATUS;
|
||||
--error 1028
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 120;
|
||||
SHOW STATUS LIKE 'Handler_read%';
|
||||
SHOW STATUS LIKE 'Handler_tmp%';
|
||||
|
||||
FLUSH STATUS;
|
||||
SELECT a AS field1, alias2.d AS field2, alias2.f AS field3, alias2.e AS field4, b AS field5
|
||||
FROM t1, t2 AS alias2, t2 AS alias3
|
||||
WHERE alias3.c IN ( SELECT 1 UNION SELECT 6 )
|
||||
GROUP BY field1, field2, field3, field4, field5
|
||||
LIMIT ROWS EXAMINED 250;
|
||||
SHOW STATUS LIKE 'Handler_read%';
|
||||
SHOW STATUS LIKE 'Handler_tmp%';
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
--echo
|
||||
--echo MDEV-161 LIMIT_ROWS EXAMINED: query with the limit and NOT EXISTS, without GROUP BY or aggregate,
|
||||
--echo returns rows, while the same query without the limit returns empty set
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1 ( a INT, b INT );
|
||||
INSERT INTO t1 VALUES (3911,17),(3847,33),(3857,26);
|
||||
|
||||
CREATE TABLE t2 ( c VARCHAR(16) );
|
||||
INSERT INTO t2 VALUES ('English'),('French'),('German');
|
||||
|
||||
CREATE TABLE t3 ( d INT, e VARCHAR(32) );
|
||||
INSERT INTO t3 VALUES (3813,'United States'),(3814,'United States');
|
||||
|
||||
SELECT * FROM t1 AS alias1, t2 AS alias2
|
||||
WHERE NOT EXISTS (
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t3
|
||||
ON (d = a)
|
||||
WHERE b <= alias1.b OR e != alias2.c
|
||||
);
|
||||
|
||||
SELECT * FROM t1 AS alias1, t2 AS alias2
|
||||
WHERE NOT EXISTS (
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t3
|
||||
ON (d = a)
|
||||
WHERE b <= alias1.b OR e != alias2.c
|
||||
) LIMIT ROWS EXAMINED 20;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
--echo
|
||||
--echo MDEV-174: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*)
|
||||
--echo with subquery in SELECT, constant table, aggregate function
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1 ( a INT );
|
||||
CREATE TABLE t2 ( b INT, c INT, KEY(c) );
|
||||
INSERT INTO t2 VALUES
|
||||
(5, 0),(3, 4),(6, 1),
|
||||
(5, 8),(4, 9),(8, 1);
|
||||
|
||||
SELECT (SELECT MAX(c) FROM t1, t2)
|
||||
FROM t2
|
||||
WHERE c = (SELECT MAX(b) FROM t2)
|
||||
LIMIT ROWS EXAMINED 3;
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
--echo
|
||||
--echo MDEV-178: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*) on the
|
||||
--echo 2nd PS execution, with DISTINCT, FROM subquery or view in SELECT, JOIN in nested subquery
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1 ( a INT );
|
||||
INSERT INTO t1 VALUES (2),(3),(150);
|
||||
CREATE TABLE t2 ( b INT );
|
||||
INSERT INTO t2 VALUES (2),(17),(3),(6);
|
||||
|
||||
CREATE VIEW v AS
|
||||
SELECT DISTINCT * FROM t1 WHERE a > (SELECT COUNT(*) FROM t1, t2 WHERE a = b);
|
||||
|
||||
PREPARE ps FROM 'SELECT * FROM v LIMIT ROWS EXAMINED 21';
|
||||
|
||||
EXECUTE ps;
|
||||
EXECUTE ps;
|
||||
|
||||
drop view v;
|
||||
drop table t1, t2;
|
Reference in New Issue
Block a user