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)
|
||||
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
||||
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,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);
|
||||
}
|
||||
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_value(String *str);
|
||||
|
||||
|
@ -2281,7 +2281,7 @@ class Item_func_in :public Item_func_opt_neg,
|
||||
{
|
||||
for (uint i= 0; i < nitems; i++)
|
||||
{
|
||||
if (!items[i]->const_item())
|
||||
if (!items[i]->const_item() || items[i]->is_expensive())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -710,6 +710,12 @@ bool Item_subselect::exec()
|
||||
DBUG_ENTER("Item_subselect::exec");
|
||||
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
|
||||
or if the query has been killed.
|
||||
|
Loading…
x
Reference in New Issue
Block a user