mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
090cecd5e8
Fix for v. 10.5
138 lines
4 KiB
Text
138 lines
4 KiB
Text
--source include/not_embedded.inc
|
|
set @tmp_opt_switch= @@optimizer_switch;
|
|
set optimizer_switch='index_merge_sort_intersection=on';
|
|
set optimizer_trace='enabled=on';
|
|
create table t0 (a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t1 (a int, b int, c int, filler char(100),
|
|
key(a), key(b), key(c));
|
|
insert into t1 select
|
|
A.a * B.a*10 + C.a*100,
|
|
A.a * B.a*10 + C.a*100,
|
|
A.a,
|
|
'filler'
|
|
from t0 A, t0 B, t0 C;
|
|
|
|
--echo This should use union:
|
|
explain select * from t1 where a=1 or b=1;
|
|
--disable_view_protocol
|
|
select * from information_schema.OPTIMIZER_TRACE;
|
|
--enable_view_protocol
|
|
drop table t0,t1;
|
|
set optimizer_trace="enabled=off";
|
|
set @@optimizer_switch= @tmp_opt_switch;
|
|
|
|
--echo # More tests added index_merge access
|
|
|
|
--enable_warnings
|
|
create table t1
|
|
(
|
|
/* Field names reflect value(rowid) distribution, st=STairs, swt= SaWTooth */
|
|
st_a int not null default 0,
|
|
swt1a int not null default 0,
|
|
swt2a int not null default 0,
|
|
|
|
st_b int not null default 0,
|
|
swt1b int not null default 0,
|
|
swt2b int not null default 0,
|
|
|
|
/* fields/keys for row retrieval tests */
|
|
key1 int,
|
|
key2 int,
|
|
key3 int,
|
|
key4 int,
|
|
|
|
/* make rows much bigger then keys */
|
|
filler1 char (200),
|
|
filler2 char (200),
|
|
filler3 char (200),
|
|
filler4 char (200),
|
|
filler5 char (200),
|
|
filler6 char (200),
|
|
|
|
/* order of keys is important */
|
|
key sta_swt12a(st_a,swt1a,swt2a),
|
|
key sta_swt1a(st_a,swt1a),
|
|
key sta_swt2a(st_a,swt2a),
|
|
key sta_swt21a(st_a,swt2a,swt1a),
|
|
key st_a(st_a),
|
|
key stb_swt1a_2b(st_b,swt1b,swt2a),
|
|
key stb_swt1b(st_b,swt1b),
|
|
key st_b(st_b),
|
|
|
|
key(key1),
|
|
key(key2),
|
|
key(key3),
|
|
key(key4)
|
|
) ;
|
|
# Fill table
|
|
create table t0 as select * from t1;
|
|
--disable_query_log
|
|
--echo # Printing of many insert into t0 values (....) disabled.
|
|
let $cnt=1000;
|
|
while ($cnt)
|
|
{
|
|
eval insert into t0 values (1, 2, 3, 1, 2, 3, 0, 0, 0, 0, 'data1', 'data2', 'data3', 'data4', 'data5', 'data6');
|
|
dec $cnt;
|
|
}
|
|
--enable_query_log
|
|
|
|
alter table t1 disable keys;
|
|
--disable_query_log
|
|
--echo # Printing of many insert into t1 select .... from t0 disabled.
|
|
let $1=4;
|
|
while ($1)
|
|
{
|
|
let $2=4;
|
|
while ($2)
|
|
{
|
|
let $3=4;
|
|
while ($3)
|
|
{
|
|
eval insert into t1 select $1, $2, $3, $1 ,$2, $3, key1, key2, key3, key4, filler1, filler2, filler3, filler4, filler5, filler6 from t0;
|
|
dec $3;
|
|
}
|
|
dec $2;
|
|
}
|
|
dec $1;
|
|
}
|
|
|
|
--echo # Printing of many insert into t1 (...) values (....) disabled.
|
|
# Row retrieval tests
|
|
# -1 is used for values 'out of any range we are using'
|
|
# insert enough rows for index intersection to be used for (key1,key2)
|
|
insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 100, 100,'key1-key2-key3-key4');
|
|
let $cnt=400;
|
|
while ($cnt)
|
|
{
|
|
eval insert into t1 (key1, key2, key3, key4, filler1) values (100, -1, 100, -1,'key1-key3');
|
|
dec $cnt;
|
|
}
|
|
let $cnt=400;
|
|
while ($cnt)
|
|
{
|
|
eval insert into t1 (key1, key2, key3, key4, filler1) values (-1, 100, -1, 100,'key2-key4');
|
|
dec $cnt;
|
|
}
|
|
--enable_query_log
|
|
alter table t1 enable keys;
|
|
|
|
insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, -1, -1, 'key1-key2');
|
|
insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 100, 100, 'key4-key3');
|
|
set optimizer_trace='enabled=on';
|
|
|
|
# Enable after fix MDEV-31408
|
|
--disable_view_protocol
|
|
--echo # 3-way ROR-intersection
|
|
explain select key1,key2,key3 from t1 where key1=100 and key2=100 and key3=100;
|
|
select JSON_DETAILED(JSON_EXTRACT(trace, '$**.analyzing_range_alternatives')) AS JS from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
|
select JSON_DETAILED(JSON_EXTRACT(trace, '$**.chosen_range_access_summary')) AS JS from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
|
|
|
--echo # ROR-union(ROR-intersection, ROR-range)
|
|
explain select key1,key2,key3,key4 from t1 where key1=100 and key2=100 or key3=100 and key4=100;
|
|
select JSON_DETAILED(JSON_EXTRACT(trace, '$**.analyzing_range_alternatives')) AS JS from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
|
select JSON_DETAILED(JSON_EXTRACT(trace, '$**.chosen_range_access_summary')) AS JS from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
|
--enable_view_protocol
|
|
|
|
drop table t0,t1;
|
|
set optimizer_trace="enabled=off";
|