Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
904027c8
Commit
904027c8
authored
Jun 02, 2016
by
Sergei Petrunia
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bb-10.1-mdev8989' into 10.1
parents
7d3d7589
b3fc7c7f
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
449 additions
and
44 deletions
+449
-44
mysql-test/r/mysqld--help.result
mysql-test/r/mysqld--help.result
+1
-1
mysql-test/r/order_by.result
mysql-test/r/order_by.result
+145
-0
mysql-test/suite/sys_vars/r/optimizer_switch_basic.result
mysql-test/suite/sys_vars/r/optimizer_switch_basic.result
+18
-18
mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
...l-test/suite/sys_vars/r/sysvars_server_notembedded.result
+4
-4
mysql-test/t/order_by.test
mysql-test/t/order_by.test
+84
-0
sql/sql_delete.cc
sql/sql_delete.cc
+1
-1
sql/sql_priv.h
sql/sql_priv.h
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+183
-11
sql/sql_select.h
sql/sql_select.h
+3
-1
sql/sql_table.cc
sql/sql_table.cc
+1
-1
sql/sql_update.cc
sql/sql_update.cc
+1
-1
sql/sys_vars.cc
sql/sys_vars.cc
+3
-1
storage/tokudb/mysql-test/tokudb/r/ext_key_1_innodb.result
storage/tokudb/mysql-test/tokudb/r/ext_key_1_innodb.result
+1
-1
storage/tokudb/mysql-test/tokudb/r/ext_key_1_tokudb.result
storage/tokudb/mysql-test/tokudb/r/ext_key_1_tokudb.result
+1
-1
storage/tokudb/mysql-test/tokudb/r/ext_key_2_innodb.result
storage/tokudb/mysql-test/tokudb/r/ext_key_2_innodb.result
+1
-1
storage/tokudb/mysql-test/tokudb/r/ext_key_2_tokudb.result
storage/tokudb/mysql-test/tokudb/r/ext_key_2_tokudb.result
+1
-1
No files found.
mysql-test/r/mysqld--help.result
View file @
904027c8
...
...
@@ -580,7 +580,7 @@ The following options may be given as the first argument:
semijoin_with_cache, join_cache_incremental,
join_cache_hashed, join_cache_bka,
optimize_join_buffer_size, table_elimination,
extended_keys, exists_to_in
extended_keys, exists_to_in
, orderby_uses_equalities
--optimizer-use-condition-selectivity=#
Controls selectivity of which conditions the optimizer
takes into account to calculate cardinality of a partial
...
...
mysql-test/r/order_by.result
View file @
904027c8
...
...
@@ -2987,3 +2987,148 @@ EXPLAIN SELECT id1 FROM t2 WHERE id2=1 AND id3=1 ORDER BY date DESC LIMIT 0,4;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ref id_23_date,id_234_date id_23_date 2 const,const 3 Using where
drop table t1,t2;
#
# MDEV-8989: ORDER BY optimizer ignores equality propagation
#
set @tmp_8989=@@optimizer_switch;
set optimizer_switch='orderby_uses_equalities=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);
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
create table t2 (
pk int primary key,
a int, b int,
filler char(200),
key(a)
);
insert into t2 select a, 1000-a, 1000-a, repeat('abc-',50) from t1 where a<200 limit 200;
create table t3 (
pk int primary key,
a int, b int,
filler char(200),
key(a)
);
insert into t3 select a, 1000-a, 1000-a, repeat('abc-',50) from t1;
insert into t3 select a+1000, 1000+a, 1000+a, repeat('abc-',50) from t1;
# The optimizer produces an order of 't2,t3' for this join
#
# Case #1 (from the bug report):
# Q1 can take advantage of t2.a to resolve ORDER BY limit w/o sorting
explain
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t2.a limit 5;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index a a 5 NULL 5 Using where
1 SIMPLE t3 ref a a 5 test.t2.a 1
#
# This is Q2 which used to have "Using temporary; using filesort" but
# has the same query plan as Q1:
#
explain
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t3.a limit 5;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index a a 5 NULL 5 Using where
1 SIMPLE t3 ref a a 5 test.t2.a 1
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t2.a limit 5;
pk a b pk a b
199 801 801 199 801 801
198 802 802 198 802 802
197 803 803 197 803 803
196 804 804 196 804 804
195 805 805 195 805 805
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t3.a limit 5;
pk a b pk a b
199 801 801 199 801 801
198 802 802 198 802 802
197 803 803 197 803 803
196 804 804 196 804 804
195 805 805 195 805 805
#
# Case #2: here, only "Using temporary" is removed. "Using filesort" remains.
#
explain
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t2.a limit 25;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL a NULL NULL NULL 200 Using where; Using filesort
1 SIMPLE t3 ref a a 5 test.t2.a 1
explain
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t3.a limit 25;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL a NULL NULL NULL 200 Using where; Using filesort
1 SIMPLE t3 ref a a 5 test.t2.a 1
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t2.a limit 25;
pk a b pk a b
199 801 801 199 801 801
198 802 802 198 802 802
197 803 803 197 803 803
196 804 804 196 804 804
195 805 805 195 805 805
194 806 806 194 806 806
193 807 807 193 807 807
192 808 808 192 808 808
191 809 809 191 809 809
190 810 810 190 810 810
189 811 811 189 811 811
188 812 812 188 812 812
187 813 813 187 813 813
186 814 814 186 814 814
185 815 815 185 815 815
184 816 816 184 816 816
183 817 817 183 817 817
182 818 818 182 818 818
181 819 819 181 819 819
180 820 820 180 820 820
179 821 821 179 821 821
178 822 822 178 822 822
177 823 823 177 823 823
176 824 824 176 824 824
175 825 825 175 825 825
select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b
from t2, t3 where t2.a=t3.a order by t3.a limit 25;
pk a b pk a b
199 801 801 199 801 801
198 802 802 198 802 802
197 803 803 197 803 803
196 804 804 196 804 804
195 805 805 195 805 805
194 806 806 194 806 806
193 807 807 193 807 807
192 808 808 192 808 808
191 809 809 191 809 809
190 810 810 190 810 810
189 811 811 189 811 811
188 812 812 188 812 812
187 813 813 187 813 813
186 814 814 186 814 814
185 815 815 185 815 815
184 816 816 184 816 816
183 817 817 183 817 817
182 818 818 182 818 818
181 819 819 181 819 819
180 820 820 180 820 820
179 821 821 179 821 821
178 822 822 178 822 822
177 823 823 177 823 823
176 824 824 176 824 824
175 825 825 175 825 825
#
# Case #3: single table access (the code that decides whether we need
# "Using temporary" is not invoked)
#
explain select * from t3 where b=a order by a limit 10;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 index NULL a 5 NULL 10 Using where
# This must not use filesort. The query plan should be like the query above:
explain select * from t3 where b=a order by b limit 10;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 index NULL a 5 NULL 10 Using where
drop table t0,t1,t2,t3;
set @@optimizer_switch=@tmp_8989;
set optimizer_switch='orderby_uses_equalities=on';
mysql-test/suite/sys_vars/r/optimizer_switch_basic.result
View file @
904027c8
This diff is collapsed.
Click to expand it.
mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
View file @
904027c8
...
...
@@ -2642,17 +2642,17 @@ ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SWITCH
SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
VARIABLE_SCOPE SESSION
VARIABLE_TYPE FLAGSET
VARIABLE_COMMENT Fine-tune the optimizer behavior
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,default
ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,
orderby_uses_equalities,
default
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_USE_CONDITION_SELECTIVITY
...
...
mysql-test/t/order_by.test
View file @
904027c8
...
...
@@ -1997,3 +1997,87 @@ EXPLAIN SELECT id1 FROM t2 WHERE id2=1 AND id3=1 ORDER BY date DESC LIMIT 0,4;
drop
table
t1
,
t2
;
--
echo
#
--
echo
# MDEV-8989: ORDER BY optimizer ignores equality propagation
--
echo
#
set
@
tmp_8989
=@@
optimizer_switch
;
set
optimizer_switch
=
'orderby_uses_equalities=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
);
insert
into
t1
select
A
.
a
+
B
.
a
*
10
+
C
.
a
*
100
from
t0
A
,
t0
B
,
t0
C
;
create
table
t2
(
pk
int
primary
key
,
a
int
,
b
int
,
filler
char
(
200
),
key
(
a
)
);
insert
into
t2
select
a
,
1000
-
a
,
1000
-
a
,
repeat
(
'abc-'
,
50
)
from
t1
where
a
<
200
limit
200
;
create
table
t3
(
pk
int
primary
key
,
a
int
,
b
int
,
filler
char
(
200
),
key
(
a
)
);
insert
into
t3
select
a
,
1000
-
a
,
1000
-
a
,
repeat
(
'abc-'
,
50
)
from
t1
;
insert
into
t3
select
a
+
1000
,
1000
+
a
,
1000
+
a
,
repeat
(
'abc-'
,
50
)
from
t1
;
--
echo
# The optimizer produces an order of 't2,t3' for this join
--
echo
#
--
echo
# Case #1 (from the bug report):
--
echo
# Q1 can take advantage of t2.a to resolve ORDER BY limit w/o sorting
explain
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t2
.
a
limit
5
;
--
echo
#
--
echo
# This is Q2 which used to have "Using temporary; using filesort" but
--
echo
# has the same query plan as Q1:
--
echo
#
explain
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t3
.
a
limit
5
;
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t2
.
a
limit
5
;
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t3
.
a
limit
5
;
--
echo
#
--
echo
# Case #2: here, only "Using temporary" is removed. "Using filesort" remains.
--
echo
#
explain
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t2
.
a
limit
25
;
explain
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t3
.
a
limit
25
;
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t2
.
a
limit
25
;
select
t2
.
pk
,
t2
.
a
,
t2
.
b
,
t3
.
pk
,
t3
.
a
,
t3
.
b
from
t2
,
t3
where
t2
.
a
=
t3
.
a
order
by
t3
.
a
limit
25
;
--
echo
#
--
echo
# Case #3: single table access (the code that decides whether we need
--
echo
# "Using temporary" is not invoked)
--
echo
#
explain
select
*
from
t3
where
b
=
a
order
by
a
limit
10
;
--
echo
# This must not use filesort. The query plan should be like the query above:
explain
select
*
from
t3
where
b
=
a
order
by
b
limit
10
;
drop
table
t0
,
t1
,
t2
,
t3
;
set
@@
optimizer_switch
=@
tmp_8989
;
set
optimizer_switch
=
'orderby_uses_equalities=on'
;
sql/sql_delete.cc
View file @
904027c8
...
...
@@ -499,7 +499,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
Filesort_tracker
*
fs_tracker
=
thd
->
lex
->
explain
->
get_upd_del_plan
()
->
filesort_tracker
;
if
(
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
order
,
&
length
,
NULL
))
||
if
(
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
NULL
,
0
,
order
,
&
length
,
NULL
))
||
(
table
->
sort
.
found_records
=
filesort
(
thd
,
table
,
sortorder
,
length
,
select
,
HA_POS_ERROR
,
true
,
...
...
sql/sql_priv.h
View file @
904027c8
...
...
@@ -224,7 +224,7 @@
#define OPTIMIZER_SWITCH_TABLE_ELIMINATION (1ULL << 26)
#define OPTIMIZER_SWITCH_EXTENDED_KEYS (1ULL << 27)
#define OPTIMIZER_SWITCH_EXISTS_TO_IN (1ULL << 28)
#define OPTIMIZER_SWITCH_
USE_CONDITION_SELECTIVITY
(1ULL << 29)
#define OPTIMIZER_SWITCH_
ORDERBY_EQ_PROP
(1ULL << 29)
#define OPTIMIZER_SWITCH_DEFAULT (OPTIMIZER_SWITCH_INDEX_MERGE | \
OPTIMIZER_SWITCH_INDEX_MERGE_UNION | \
...
...
sql/sql_select.cc
View file @
904027c8
This diff is collapsed.
Click to expand it.
sql/sql_select.h
View file @
904027c8
...
...
@@ -1821,7 +1821,9 @@ bool error_if_full_join(JOIN *join);
int
report_error
(
TABLE
*
table
,
int
error
);
int
safe_index_read
(
JOIN_TAB
*
tab
);
int
get_quick_record
(
SQL_SELECT
*
select
);
SORT_FIELD
*
make_unireg_sortorder
(
THD
*
thd
,
ORDER
*
order
,
uint
*
length
,
SORT_FIELD
*
make_unireg_sortorder
(
THD
*
thd
,
JOIN
*
join
,
table_map
first_table_map
,
ORDER
*
order
,
uint
*
length
,
SORT_FIELD
*
sortorder
);
int
setup_order
(
THD
*
thd
,
Item
**
ref_pointer_array
,
TABLE_LIST
*
tables
,
List
<
Item
>
&
fields
,
List
<
Item
>
&
all_fields
,
ORDER
*
order
);
...
...
sql/sql_table.cc
View file @
904027c8
...
...
@@ -9472,7 +9472,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
if
(
thd
->
lex
->
select_lex
.
setup_ref_array
(
thd
,
order_num
)
||
setup_order
(
thd
,
thd
->
lex
->
select_lex
.
ref_pointer_array
,
&
tables
,
fields
,
all_fields
,
order
)
||
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
order
,
&
length
,
NULL
))
||
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
NULL
,
0
,
order
,
&
length
,
NULL
))
||
(
from
->
sort
.
found_records
=
filesort
(
thd
,
from
,
sortorder
,
length
,
NULL
,
HA_POS_ERROR
,
true
,
...
...
sql/sql_update.cc
View file @
904027c8
...
...
@@ -567,7 +567,7 @@ int mysql_update(THD *thd,
Filesort_tracker
*
fs_tracker
=
thd
->
lex
->
explain
->
get_upd_del_plan
()
->
filesort_tracker
;
if
(
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
order
,
&
length
,
NULL
))
||
if
(
!
(
sortorder
=
make_unireg_sortorder
(
thd
,
NULL
,
0
,
order
,
&
length
,
NULL
))
||
(
table
->
sort
.
found_records
=
filesort
(
thd
,
table
,
sortorder
,
length
,
select
,
limit
,
true
,
...
...
sql/sys_vars.cc
View file @
904027c8
...
...
@@ -2391,7 +2391,9 @@ export const char *optimizer_switch_names[]=
"table_elimination"
,
"extended_keys"
,
"exists_to_in"
,
"default"
,
NullS
"orderby_uses_equalities"
,
"default"
,
NullS
};
static
bool
fix_optimizer_switch
(
sys_var
*
self
,
THD
*
thd
,
enum_var_type
type
)
...
...
storage/tokudb/mysql-test/tokudb/r/ext_key_1_innodb.result
View file @
904027c8
drop table if exists t;
select @@optimizer_switch;
@@optimizer_switch
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
create table t (id int not null, x int not null, y int not null, primary key(id), key(x)) engine=innodb;
insert into t values (0,0,0),(1,1,1),(2,2,2),(3,2,3),(4,2,4);
explain select x,id from t force index (x) where x=0 and id=0;
...
...
storage/tokudb/mysql-test/tokudb/r/ext_key_1_tokudb.result
View file @
904027c8
drop table if exists t;
select @@optimizer_switch;
@@optimizer_switch
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
create table t (id int not null, x int not null, y int not null, primary key(id), key(x)) engine=tokudb;
insert into t values (0,0,0),(1,1,1),(2,2,2),(3,2,3),(4,2,4);
explain select x,id from t force index (x) where x=0 and id=0;
...
...
storage/tokudb/mysql-test/tokudb/r/ext_key_2_innodb.result
View file @
904027c8
drop table if exists t;
select @@optimizer_switch;
@@optimizer_switch
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
create table t (a int not null, b int not null, c int not null, d int not null, primary key(a,b), key(c,a)) engine=innodb;
insert into t values (0,0,0,0),(0,1,0,1);
explain select c,a,b from t where c=0 and a=0 and b=1;
...
...
storage/tokudb/mysql-test/tokudb/r/ext_key_2_tokudb.result
View file @
904027c8
drop table if exists t;
select @@optimizer_switch;
@@optimizer_switch
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on
,orderby_uses_equalities=off
create table t (a int not null, b int not null, c int not null, d int not null, primary key(a,b), key(c,a)) engine=tokudb;
insert into t values (0,0,0,0),(0,1,0,1);
explain select c,a,b from t where c=0 and a=0 and b=1;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment