MDEV-35074: selectivity_notembedded fails with --view-protocol
Make the test view-protocol proof: save the contents of optimizer_trace and then we can do many queries against it. Also removed end-of-line spaces.
This commit is contained in:
parent
e9c999caf4
commit
5673cbe094
@ -218,26 +218,28 @@ index (key1, pk),
|
|||||||
primary key (pk)
|
primary key (pk)
|
||||||
);
|
);
|
||||||
insert into t1
|
insert into t1
|
||||||
select
|
select
|
||||||
seq, FLOOR(seq/100), 'filler'
|
seq, FLOOR(seq/100), 'filler'
|
||||||
from
|
from
|
||||||
seq_1_to_1000;
|
seq_1_to_1000;
|
||||||
analyze table t1;
|
analyze table t1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status Engine-independent statistics collected
|
test.t1 analyze status Engine-independent statistics collected
|
||||||
test.t1 analyze status OK
|
test.t1 analyze status OK
|
||||||
set optimizer_trace=1;
|
set optimizer_trace=1;
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
|
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
|
||||||
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
# Must have a note that "multiplier is too high":
|
# Must have a note that "multiplier is too high":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
@ -255,10 +257,10 @@ JS
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
# Must not include 1.79...e308 as cost:
|
# Must not include 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
@ -280,20 +282,22 @@ JS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
drop table opt_trace;
|
||||||
# Disable the fix and try the same:
|
# Disable the fix and try the same:
|
||||||
set @@optimizer_adjust_secondary_key_costs='';
|
set @@optimizer_adjust_secondary_key_costs='';
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
|
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
|
||||||
drop table t1;
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
# Shows a high multiplier, without a "note":
|
# Shows a high multiplier, without a "note":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
@ -309,10 +313,10 @@ JS
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
# Includes 1.79...e308 as cost:
|
# Includes 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
@ -334,7 +338,9 @@ JS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
drop table opt_trace;
|
||||||
set optimizer_adjust_secondary_key_costs=default;
|
set optimizer_adjust_secondary_key_costs=default;
|
||||||
|
drop table t1;
|
||||||
#
|
#
|
||||||
# Clean up
|
# Clean up
|
||||||
#
|
#
|
||||||
|
@ -213,26 +213,28 @@ index (key1, pk),
|
|||||||
primary key (pk)
|
primary key (pk)
|
||||||
);
|
);
|
||||||
insert into t1
|
insert into t1
|
||||||
select
|
select
|
||||||
seq, FLOOR(seq/100), 'filler'
|
seq, FLOOR(seq/100), 'filler'
|
||||||
from
|
from
|
||||||
seq_1_to_1000;
|
seq_1_to_1000;
|
||||||
analyze table t1;
|
analyze table t1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status Engine-independent statistics collected
|
test.t1 analyze status Engine-independent statistics collected
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
set optimizer_trace=1;
|
set optimizer_trace=1;
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
|
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
|
||||||
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
# Must have a note that "multiplier is too high":
|
# Must have a note that "multiplier is too high":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
@ -250,10 +252,10 @@ JS
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
# Must not include 1.79...e308 as cost:
|
# Must not include 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
@ -275,20 +277,22 @@ JS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
drop table opt_trace;
|
||||||
# Disable the fix and try the same:
|
# Disable the fix and try the same:
|
||||||
set @@optimizer_adjust_secondary_key_costs='';
|
set @@optimizer_adjust_secondary_key_costs='';
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
|
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
|
||||||
drop table t1;
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
# Shows a high multiplier, without a "note":
|
# Shows a high multiplier, without a "note":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
@ -304,10 +308,10 @@ JS
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
# Includes 1.79...e308 as cost:
|
# Includes 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
JS
|
JS
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
@ -329,7 +333,9 @@ JS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
drop table opt_trace;
|
||||||
set optimizer_adjust_secondary_key_costs=default;
|
set optimizer_adjust_secondary_key_costs=default;
|
||||||
|
drop table t1;
|
||||||
#
|
#
|
||||||
# Clean up
|
# Clean up
|
||||||
#
|
#
|
||||||
|
@ -233,50 +233,59 @@ create table t1 (
|
|||||||
);
|
);
|
||||||
|
|
||||||
insert into t1
|
insert into t1
|
||||||
select
|
select
|
||||||
seq, FLOOR(seq/100), 'filler'
|
seq, FLOOR(seq/100), 'filler'
|
||||||
from
|
from
|
||||||
seq_1_to_1000;
|
seq_1_to_1000;
|
||||||
analyze table t1;
|
analyze table t1;
|
||||||
|
|
||||||
set optimizer_trace=1;
|
set optimizer_trace=1;
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
|
|
||||||
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
|
|
||||||
--echo # Must have a note that "multiplier is too high":
|
--echo # Must have a note that "multiplier is too high":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
|
|
||||||
--echo # Must not include 1.79...e308 as cost:
|
--echo # Must not include 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
|
drop table opt_trace;
|
||||||
|
|
||||||
--echo # Disable the fix and try the same:
|
--echo # Disable the fix and try the same:
|
||||||
set @@optimizer_adjust_secondary_key_costs='';
|
set @@optimizer_adjust_secondary_key_costs='';
|
||||||
explain select * from t1
|
explain select * from t1
|
||||||
where
|
where
|
||||||
pk in (1,2,3,4,5) and
|
pk in (1,2,3,4,5) and
|
||||||
key1 <= 4;
|
key1 <= 4;
|
||||||
drop table t1;
|
|
||||||
|
create temporary table opt_trace as
|
||||||
|
select * from information_schema.optimizer_trace;
|
||||||
|
|
||||||
--echo # Shows a high multiplier, without a "note":
|
--echo # Shows a high multiplier, without a "note":
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
|
|
||||||
--echo # Includes 1.79...e308 as cost:
|
--echo # Includes 1.79...e308 as cost:
|
||||||
select
|
select
|
||||||
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
json_detailed(json_extract(trace,'$**.best_access_path')) as JS
|
||||||
from
|
from
|
||||||
information_schema.optimizer_trace;
|
opt_trace;
|
||||||
set optimizer_adjust_secondary_key_costs=default;
|
drop table opt_trace;
|
||||||
|
|
||||||
|
set optimizer_adjust_secondary_key_costs=default;
|
||||||
|
drop table t1;
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Clean up
|
--echo # Clean up
|
||||||
--echo #
|
--echo #
|
||||||
|
Loading…
x
Reference in New Issue
Block a user