MDEV-19008 Slow EXPLAIN SELECT ... WHERE col IN (const1,const2,(subquery))
This commit is contained in:
parent
482710b20c
commit
f4484dfdbf
@ -1655,3 +1655,22 @@ Note 1105 DBUG: [1] arg=2 handler=0 (time)
|
|||||||
Note 1105 DBUG: [2] arg=3 handler=2 (datetime)
|
Note 1105 DBUG: [2] arg=3 handler=2 (datetime)
|
||||||
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
||||||
SET SESSION debug_dbug="-d,Item_func_in";
|
SET SESSION debug_dbug="-d,Item_func_in";
|
||||||
|
#
|
||||||
|
# MDEV-19008 Slow EXPLAIN SELECT ... WHERE col IN (const1,const2,(subquery))
|
||||||
|
#
|
||||||
|
SET SESSION debug_dbug="+d,Item_subselect";
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE a IN (1,2,(SELECT MAX(a) FROM t1));
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using where
|
||||||
|
2 SUBQUERY t1 ALL NULL NULL NULL NULL 10
|
||||||
|
SELECT * FROM t1 WHERE a IN (1,2,(SELECT MAX(a) FROM t1));
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
9
|
||||||
|
Warnings:
|
||||||
|
Note 1105 DBUG: Item_subselect::exec (select max(`test`.`t1`.`a`) from `test`.`t1`)
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET SESSION debug_dbug="-d,Item_subselect";
|
||||||
|
@ -475,3 +475,16 @@ SELECT
|
|||||||
|
|
||||||
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
||||||
SET SESSION debug_dbug="-d,Item_func_in";
|
SET SESSION debug_dbug="-d,Item_func_in";
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19008 Slow EXPLAIN SELECT ... WHERE col IN (const1,const2,(subquery))
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET SESSION debug_dbug="+d,Item_subselect";
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE a IN (1,2,(SELECT MAX(a) FROM t1));
|
||||||
|
SELECT * FROM t1 WHERE a IN (1,2,(SELECT MAX(a) FROM t1));
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET SESSION debug_dbug="-d,Item_subselect";
|
||||||
|
10
sql/item.h
10
sql/item.h
@ -1409,6 +1409,16 @@ public:
|
|||||||
LOWEST_PRECEDENCE);
|
LOWEST_PRECEDENCE);
|
||||||
}
|
}
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
|
|
||||||
|
class Print: public String
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Print(Item *item, enum_query_type type)
|
||||||
|
{
|
||||||
|
item->print(this, type);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void print_item_w_name(String *str, enum_query_type query_type);
|
void print_item_w_name(String *str, enum_query_type query_type);
|
||||||
void print_value(String *str);
|
void print_value(String *str);
|
||||||
|
|
||||||
|
@ -2281,7 +2281,7 @@ class Item_func_in :public Item_func_opt_neg,
|
|||||||
{
|
{
|
||||||
for (uint i= 0; i < nitems; i++)
|
for (uint i= 0; i < nitems; i++)
|
||||||
{
|
{
|
||||||
if (!items[i]->const_item())
|
if (!items[i]->const_item() || items[i]->is_expensive())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -710,6 +710,12 @@ bool Item_subselect::exec()
|
|||||||
DBUG_ENTER("Item_subselect::exec");
|
DBUG_ENTER("Item_subselect::exec");
|
||||||
DBUG_ASSERT(fixed);
|
DBUG_ASSERT(fixed);
|
||||||
|
|
||||||
|
DBUG_EXECUTE_IF("Item_subselect",
|
||||||
|
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
|
||||||
|
ER_UNKNOWN_ERROR, "DBUG: Item_subselect::exec %s",
|
||||||
|
Item::Print(this,
|
||||||
|
enum_query_type(QT_TO_SYSTEM_CHARSET |
|
||||||
|
QT_WITHOUT_INTRODUCERS)).ptr()););
|
||||||
/*
|
/*
|
||||||
Do not execute subselect in case of a fatal error
|
Do not execute subselect in case of a fatal error
|
||||||
or if the query has been killed.
|
or if the query has been killed.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user