Improvements to EXPLAIN QUERY PLAN formatting. The MULTI-INDEX OR now shows
a separate "INDEX" subtree for each index. SCALAR SUBQUERY entries provide a subquery number that is related back to the .selecttrace output. FossilOrigin-Name: 7153552bac51295c56a1c42ca79d57195851e232509f9e9610375692f48c7e86
This commit is contained in:
@@ -280,7 +280,7 @@ do_eqp_test autoindex1-600a {
|
||||
|--MATERIALIZE xxxxxx
|
||||
| |--SCAN TABLE sheep AS s
|
||||
| |--SEARCH TABLE flock_owner AS prev USING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date<?)
|
||||
| `--CORRELATED SCALAR SUBQUERY
|
||||
| `--CORRELATED SCALAR SUBQUERY xxxxxx
|
||||
| `--SEARCH TABLE flock_owner AS later USING COVERING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date>? AND owner_change_date<?)
|
||||
|--SCAN TABLE sheep AS x USING INDEX sheep_reg_flock_index
|
||||
`--SEARCH SUBQUERY xxxxxx AS y USING AUTOMATIC COVERING INDEX (sheep_no=?)
|
||||
|
||||
+12
-6
@@ -90,8 +90,10 @@ do_eqp_test 1.3 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?
|
||||
`--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
|
||||
|--INDEX 1
|
||||
| `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?
|
||||
`--INDEX 2
|
||||
`--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
|
||||
}
|
||||
|
||||
do_eqp_test 1.4 {
|
||||
@@ -99,8 +101,10 @@ do_eqp_test 1.4 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?
|
||||
`--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
|
||||
|--INDEX 1
|
||||
| `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?
|
||||
`--INDEX 2
|
||||
`--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
|
||||
}
|
||||
|
||||
do_execsql_test 1.5 {
|
||||
@@ -150,8 +154,10 @@ ifcapable !icu {
|
||||
} [string map {"\n " \n} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
|
||||
`--SEARCH TABLE t2 USING INDEX t2y (y=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t2 USING INDEX t2y (y=?)
|
||||
}]
|
||||
}
|
||||
|
||||
|
||||
+14
-7
@@ -58,9 +58,12 @@ do_eqp_test 3.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--MULTI-INDEX OR
|
||||
| |--SEARCH TABLE t5 USING INDEX t5b (b=?)
|
||||
| |--SEARCH TABLE t5 USING INDEX t5c (c=?)
|
||||
| `--SEARCH TABLE t5 USING INDEX t5d (d=?)
|
||||
| |--INDEX 1
|
||||
| | `--SEARCH TABLE t5 USING INDEX t5b (b=?)
|
||||
| |--INDEX 2
|
||||
| | `--SEARCH TABLE t5 USING INDEX t5c (c=?)
|
||||
| `--INDEX 3
|
||||
| `--SEARCH TABLE t5 USING INDEX t5d (d=?)
|
||||
`--USE TEMP B-TREE FOR ORDER BY
|
||||
}
|
||||
|
||||
@@ -124,8 +127,10 @@ do_eqp_test 6.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--MULTI-INDEX OR
|
||||
| |--SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)
|
||||
| `--SEARCH TABLE t3 USING INDEX t3i2 (c=?)
|
||||
| |--INDEX 1
|
||||
| | `--SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)
|
||||
| `--INDEX 2
|
||||
| `--SEARCH TABLE t3 USING INDEX t3i2 (c=?)
|
||||
`--USE TEMP B-TREE FOR ORDER BY
|
||||
}
|
||||
|
||||
@@ -149,8 +154,10 @@ do_eqp_test 7.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--MULTI-INDEX OR
|
||||
| |--SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)
|
||||
| `--SEARCH TABLE t1 USING INDEX t1b (b=?)
|
||||
| |--INDEX 1
|
||||
| | `--SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)
|
||||
| `--INDEX 2
|
||||
| `--SEARCH TABLE t1 USING INDEX t1b (b=?)
|
||||
`--USE TEMP B-TREE FOR ORDER BY
|
||||
}
|
||||
|
||||
|
||||
+14
-10
@@ -45,8 +45,10 @@ do_eqp_test 1.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--MULTI-INDEX OR
|
||||
| |--SEARCH TABLE t1 USING INDEX i1 (a=?)
|
||||
| `--SEARCH TABLE t1 USING INDEX i2 (b=?)
|
||||
| |--INDEX 1
|
||||
| | `--SEARCH TABLE t1 USING INDEX i1 (a=?)
|
||||
| `--INDEX 2
|
||||
| `--SEARCH TABLE t1 USING INDEX i2 (b=?)
|
||||
`--SCAN TABLE t2
|
||||
}
|
||||
do_eqp_test 1.3 {
|
||||
@@ -55,8 +57,10 @@ do_eqp_test 1.3 {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t2
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t1 USING INDEX i1 (a=?)
|
||||
`--SEARCH TABLE t1 USING INDEX i2 (b=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t1 USING INDEX i1 (a=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t1 USING INDEX i2 (b=?)
|
||||
}
|
||||
do_eqp_test 1.3 {
|
||||
SELECT a FROM t1 ORDER BY a
|
||||
@@ -225,7 +229,7 @@ do_eqp_test 3.1.1 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--SCALAR SUBQUERY
|
||||
`--SCALAR SUBQUERY xxxxxx
|
||||
`--SCAN TABLE t1 AS sub
|
||||
}
|
||||
do_eqp_test 3.1.2 {
|
||||
@@ -233,7 +237,7 @@ do_eqp_test 3.1.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--SCALAR SUBQUERY
|
||||
`--SCALAR SUBQUERY xxxxxx
|
||||
`--SCAN TABLE t1 AS sub
|
||||
}
|
||||
do_eqp_test 3.1.3 {
|
||||
@@ -241,7 +245,7 @@ do_eqp_test 3.1.3 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--SCALAR SUBQUERY
|
||||
`--SCALAR SUBQUERY xxxxxx
|
||||
|--SCAN TABLE t1 AS sub
|
||||
`--USE TEMP B-TREE FOR ORDER BY
|
||||
}
|
||||
@@ -250,7 +254,7 @@ do_eqp_test 3.1.4 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--SCALAR SUBQUERY
|
||||
`--SCALAR SUBQUERY xxxxxx
|
||||
`--SCAN TABLE t2 USING COVERING INDEX t2i1
|
||||
}
|
||||
|
||||
@@ -302,7 +306,7 @@ det 3.3.3 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--CORRELATED SCALAR SUBQUERY
|
||||
`--CORRELATED SCALAR SUBQUERY xxxxxx
|
||||
`--SCAN TABLE t2
|
||||
}
|
||||
|
||||
@@ -813,7 +817,7 @@ do_eqp_test 9.1 {
|
||||
|--MATERIALIZE xxxxxx
|
||||
| |--SCAN TABLE forumpost AS x USING INDEX forumthread
|
||||
| |--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR
|
||||
| |--CORRELATED SCALAR SUBQUERY
|
||||
| |--CORRELATED SCALAR SUBQUERY xxxxxx
|
||||
| | |--SEARCH TABLE forumpost USING COVERING INDEX forumthread (froot=?)
|
||||
| | `--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR
|
||||
| `--USE TEMP B-TREE FOR ORDER BY
|
||||
|
||||
+4
-2
@@ -267,8 +267,10 @@ do_eqp_test 7.2 {
|
||||
QUERY PLAN
|
||||
|--SCAN TABLE t1
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
|
||||
`--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
|
||||
}
|
||||
|
||||
do_execsql_test 7.3 {
|
||||
|
||||
@@ -110,6 +110,8 @@ do_test tkt-80ba2-200 {
|
||||
} {300 object_change 2048}
|
||||
do_test tkt-80ba2-201 {
|
||||
db eval {
|
||||
PRAGMA vdbe_debug=on;
|
||||
PRAGMA vdbe_addoptrace=on;
|
||||
CREATE INDEX timeline_entry_id_idx on timeline(entry_id);
|
||||
SELECT entry_type,
|
||||
entry_types.name,
|
||||
|
||||
+4
-2
@@ -23353,8 +23353,10 @@ do_eqp_test where7-3.2 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
|--MULTI-INDEX OR
|
||||
| |--SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?)
|
||||
| `--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)
|
||||
| |--INDEX 1
|
||||
| | `--SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?)
|
||||
| `--INDEX 2
|
||||
| `--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)
|
||||
|--SEARCH TABLE t302 USING INDEX t302_c8_c3 (c8=? AND c3>?)
|
||||
`--USE TEMP B-TREE FOR ORDER BY
|
||||
}
|
||||
|
||||
+12
-6
@@ -364,8 +364,10 @@ ifcapable explain {
|
||||
QUERY PLAN
|
||||
|--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?)
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t2 USING INDEX t2d (d=?)
|
||||
`--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t2 USING INDEX t2d (d=?)
|
||||
`--INDEX 3
|
||||
`--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
|
||||
}]
|
||||
do_eqp_test where9-3.2 {
|
||||
SELECT coalesce(t2.a,9999)
|
||||
@@ -375,8 +377,10 @@ ifcapable explain {
|
||||
QUERY PLAN
|
||||
|--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?)
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t2 USING INDEX t2d (d=?)
|
||||
`--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t2 USING INDEX t2d (d=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
|
||||
}]
|
||||
}
|
||||
|
||||
@@ -456,8 +460,10 @@ do_eqp_test where9-5.1 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t1 USING INDEX t1c (c=?)
|
||||
`--SEARCH TABLE t1 USING INDEX t1d (d=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t1 USING INDEX t1c (c=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t1 USING INDEX t1d (d=?)
|
||||
}
|
||||
|
||||
# In contrast, b=1000 is preferred over any OR-clause.
|
||||
|
||||
+8
-4
@@ -31,8 +31,10 @@ do_eqp_test 1.1 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t1 USING INDEX i1 (b=?)
|
||||
`--SEARCH TABLE t1 USING INDEX i2 (c=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t1 USING INDEX i1 (b=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t1 USING INDEX i2 (c=?)
|
||||
}
|
||||
|
||||
do_execsql_test 1.2 {
|
||||
@@ -61,8 +63,10 @@ do_eqp_test 2.1 {
|
||||
} {
|
||||
QUERY PLAN
|
||||
`--MULTI-INDEX OR
|
||||
|--SEARCH TABLE t2 USING INDEX i3 (b=?)
|
||||
`--SEARCH TABLE t2 USING INDEX i4 (c=?)
|
||||
|--INDEX 1
|
||||
| `--SEARCH TABLE t2 USING INDEX i3 (b=?)
|
||||
`--INDEX 2
|
||||
`--SEARCH TABLE t2 USING INDEX i4 (c=?)
|
||||
}
|
||||
|
||||
do_execsql_test 2.2 {
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ do_eqp_test 3.2.2 {
|
||||
|--MATERIALIZE xxxxxx
|
||||
| |--SETUP
|
||||
| | |--SCAN CONSTANT ROW
|
||||
| | `--SCALAR SUBQUERY
|
||||
| | `--SCALAR SUBQUERY xxxxxx
|
||||
| | `--SCAN TABLE w2
|
||||
| `--RECURSIVE STEP
|
||||
| |--SCAN TABLE w1
|
||||
|
||||
Reference in New Issue
Block a user