|
Here is a testcase with dbt3 database and MyISAM. The query however is remarkably similar
create database dbt3;
|
use dbt3;
|
--disable_query_log
|
--source include/dbt3_s001.inc
|
--enable_query_log
|
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
|
# Cleanup
|
drop database dbt3;
|
|
bb-11.0
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
COUNT(*)
|
168
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
1 SIMPLE lineitem range PRIMARY,i_l_orderkey,i_l_orderkey_quantity PRIMARY 4 NULL 177 100.00 Using where; Using index
|
Warnings:
|
Note 1003 select count(0) AS `COUNT(*)` from `dbt3`.`lineitem` where `dbt3`.`lineitem`.`l_orderkey` between 111 and 262 or `dbt3`.`lineitem`.`l_orderkey` between 152 and 672 and `dbt3`.`lineitem`.`l_linenumber` between 4 and 9
|
|
baseline
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
COUNT(*)
|
293
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
1 SIMPLE lineitem range PRIMARY,i_l_orderkey,i_l_orderkey_quantity PRIMARY 8 NULL 570 92.98 Using where; Using index
|
Warnings:
|
Note 1003 select count(0) AS `COUNT(*)` from `dbt3`.`lineitem` where `dbt3`.`lineitem`.`l_orderkey` between 111 and 262 or `dbt3`.`lineitem`.`l_orderkey` between 152 and 672 and `dbt3`.`lineitem`.`l_linenumber` between 4 and 9
|
|
|
And here is apparently the same problem, but it doesn't show explicitly range access anymore (so that it's even more difficult to recognize in tests)
create database dbt3;
|
use dbt3;
|
--disable_query_log
|
--source include/dbt3_s001.inc
|
--enable_query_log
|
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
|
# Cleanup
|
drop database dbt3;
|
|
bb-11.0
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
COUNT(*)
|
229
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
1 SIMPLE lineitem index_merge PRIMARY,i_l_orderkey,i_l_orderkey_quantity,i_l_commitdate PRIMARY,i_l_commitdate 4,4 NULL 256 100.00 Using sort_union(PRIMARY,i_l_commitdate); Using where
|
Warnings:
|
Note 1003 select count(0) AS `COUNT(*)` from `dbt3`.`lineitem` where `dbt3`.`lineitem`.`l_orderkey` between 111 and 262 or `dbt3`.`lineitem`.`l_commitDATE` between '1994-07-01' and '1994-07-29' or `dbt3`.`lineitem`.`l_orderkey` between 152 and 672 and `dbt3`.`lineitem`.`l_linenumber` between 4 and 9
|
|
baseline
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
COUNT(*)
|
354
|
EXPLAIN EXTENDED
|
SELECT COUNT(*) FROM lineitem WHERE l_orderkey BETWEEN 111 AND 262 OR ( l_commitDATE BETWEEN '1994-07-01' AND '1994-07-29' OR l_orderkey BETWEEN 152 AND 672 AND l_linenumber BETWEEN 4 AND 9 );
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
1 SIMPLE lineitem index_merge PRIMARY,i_l_orderkey,i_l_orderkey_quantity,i_l_commitdate i_l_orderkey,i_l_commitdate 4,4 NULL 619 100.00 Using sort_union(i_l_orderkey,i_l_commitdate); Using where
|
Warnings:
|
Note 1003 select count(0) AS `COUNT(*)` from `dbt3`.`lineitem` where `dbt3`.`lineitem`.`l_orderkey` between 111 and 262 or `dbt3`.`lineitem`.`l_commitDATE` between '1994-07-01' and '1994-07-29' or `dbt3`.`lineitem`.`l_orderkey` between 152 and 672 and `dbt3`.`lineitem`.`l_linenumber` between 4 and 9
|
|