Request additional test data. Was: [sqlite] Crippling query plan change between 3.7.13 and 3.8.10.2
Would it be possible for you to send in other complex queries used by
your application? I'd like to add these queries to the testing
process used by SQLite, if you don't mind. Such queries also provide
us with good examples in which to look for new query optimization
opportunities.
You can send examples by reply email to this mailing list, or directly
to me at drh@sqlite.org.
Note to all readers: If you have other databases that use complex
queries involving multi-way joins, subqueries, views, triggers,
foreign key constraints, partial indexes, common table expressions,
and so forth that you can share with us, either publically or under
NDA, I would appreciate hearing from you. These examples help us to
do a better job of enhancing the query planner and preventing future
performance regressions.
On 5/28/15, Florian Weimer <fw@deneb.enyo.de> wrote:
> The Debian security tracker <https://security-tracker.debian.org/>
> uses an SQLite database to keep track of vulnerabilites and
> generate reports.
>
> We recently upgraded SQLite from 3.7.13 to 3.8.7.1 as part of an
> operating system upgrade and experienced a crippling query planner
> change. I verified that the issue is present in 3.8.10.2 as well.
>
> Here are the details. A sample database file is available at
> <https://people.debian.org/~fw/security.db.gz>.
>
> CREATE TABLE source_packages
> (name TEXT NOT NULL,
> release TEXT NOT NULL,
> subrelease TEXT NOT NULL,
> archive TEXT NOT NULL,
> version TEXT NOT NULL,
> version_id INTEGER NOT NULL DEFAULT 0,
> PRIMARY KEY (name, release, subrelease, archive));
> CREATE TABLE package_notes
> (id INTEGER NOT NULL PRIMARY KEY,
> bug_name TEXT NOT NULL,
> package TEXT NOT NULL,
> fixed_version TEXT
> CHECK (fixed_version IS NULL OR fixed_version <> ''),
> fixed_version_id INTEGER NOT NULL DEFAULT 0,
> release TEXT NOT NULL,
> package_kind TEXT NOT NULL DEFAULT 'unknown',
> urgency TEXT NOT NULL,
> bug_origin TEXT NOT NULL DEFAULT '');
> CREATE TABLE debian_bugs
> (bug INTEGER NOT NULL,
> note INTEGER NOT NULL,
> PRIMARY KEY (bug, note));
> CREATE TABLE bugs
> (name TEXT NOT NULL PRIMARY KEY,
> cve_status TEXT NOT NULL
> CHECK (cve_status IN
> ('', 'CANDIDATE', 'ASSIGNED', 'RESERVED',
> 'REJECTED')),
> not_for_us INTEGER NOT NULL CHECK (not_for_us IN (0, 1)),
> description TEXT NOT NULL,
> release_date TEXT NOT NULL,
> source_file TEXT NOT NULL,
> source_line INTEGER NOT NULL);
> CREATE TABLE bugs_notes
> (bug_name TEXT NOT NULL CHECK (typ <> ''),
> typ TEXT NOT NULL CHECK (typ IN ('TODO', 'NOTE')),
> release TEXT NOT NULL DEFAULT '',
> comment TEXT NOT NULL CHECK (comment <> ''));
> CREATE TABLE bugs_xref
> (source TEXT NOT NULL,
> target TEXT NOT NULL,
> PRIMARY KEY (source, target));
> CREATE TABLE bug_status
> (bug_name TEXT NOT NULL,
> release TEXT NOT NULL,
> status TEXT NOT NULL
> CHECK (status IN ('vulnerable', 'fixed', 'unknown',
> 'undetermined',
> 'partially-fixed', 'todo')),
> reason TEXT NOT NULL,
> PRIMARY KEY (bug_name, release));
> CREATE TABLE source_package_status
> (bug_name TEXT NOT NULL,
> package INTEGER NOT NULL,
> vulnerable INTEGER NOT NULL,
> urgency TEXT NOT NULL,
> PRIMARY KEY (bug_name, package));
> CREATE TABLE removed_packages (name TEXT NOT NULL PRIMARY KEY);
> CREATE TABLE nvd_data
> (cve_name TEXT NOT NULL PRIMARY KEY,
> cve_desc TEXT NOT NULL,
> discovered TEXT NOT NULL,
> published TEXT NOT NULL,
> severity TEXT NOT NULL,
> range_local INTEGER,
> range_remote INTEGER,
> range_user_init INTEGER,
> loss_avail INTEGER NOT NULL,
> loss_conf INTEGER NOT NULL,
> loss_int INTEGER NOT NULL,
> loss_sec_prot_user INTEGER NOT NULL,
> loss_sec_prot_admin INTEGER NOT NULL,
> loss_sec_prot_other INTEGER NOT NULL);
> CREATE TABLE debsecan_data
> (name TEXT NOT NULL PRIMARY KEY,
> data TEXT NOT NULL);
> CREATE TABLE package_notes_nodsa
> (bug_name TEXT NOT NULL,
> package TEXT NOT NULL,
> release TEXT NOT NULL,
> reason TEXT NOT NULL,
> comment TEXT NOT NULL,
> PRIMARY KEY (bug_name, package, release));
> CREATE INDEX package_notes_package
> ON package_notes(package);
> CREATE INDEX bugs_xref_target ON bugs_xref(target);
> CREATE INDEX source_package_status_package
> ON source_package_status(package);
> CREATE UNIQUE INDEX package_notes_bug
> ON package_notes(bug_name, package, release);
> CREATE VIEW debian_cve AS
> SELECT DISTINCT debian_bugs.bug, st.bug_name
> FROM package_notes, debian_bugs, source_package_status AS st
> WHERE package_notes.bug_name = st.bug_name
> AND debian_bugs.note = package_notes.id
> ORDER BY debian_bugs.bug;
>
> The offending query is:
>
> SELECT sp.name, st.bug_name,
> (SELECT cve_desc FROM nvd_data
> WHERE cve_name = st.bug_name),
> (SELECT debian_cve.bug FROM debian_cve
> WHERE debian_cve.bug_name = st.bug_name
> ORDER BY debian_cve.bug),
> sp.release, sp.subrelease,
> sp.version,
> (SELECT pn.fixed_version FROM package_notes AS pn
> WHERE pn.bug_name = st.bug_name
> AND pn.package = sp.name AND
> (pn.release = sp.release OR (pn.release = '' AND fixed_version !=
> ''))),
> st.vulnerable, st.urgency,
> (SELECT range_remote FROM nvd_data
> WHERE cve_name = st.bug_name),
> (SELECT comment FROM package_notes_nodsa AS nd
> WHERE nd.package = sp.name AND nd.release = sp.release
> AND nd.bug_name = st.bug_name) AS nodsa
> FROM source_package_status AS st, source_packages AS sp, bugs
> WHERE sp.rowid = st.package AND st.bug_name = bugs.name
> AND ( st.bug_name LIKE 'CVE-%' OR st.bug_name LIKE 'TEMP-%' )
> AND ( sp.release = 'sid' OR sp.release = 'stretch' OR sp.release =
> 'jessie'
> OR sp.release = 'wheezy' OR sp.release = 'squeeze' )
> ORDER BY sp.name, st.bug_name, sp.release, sp.subrelease;
>
> The *old* explain output:
>
> addr opcode p1 p2 p3 p4 p5 comment
> ---- ------------- ---- ---- ---- ------------- -- -------------
> 0 Trace 0 0 0 00
> 1 SorterOpen 11 6 0 keyinfo(4,BINARY,BINARY) 00
>
> 2 String8 0 1 0 sid 00
> 3 String8 0 2 0 stretch 00
> 4 String8 0 3 0 jessie 00
> 5 String8 0 4 0 wheezy 00
> 6 String8 0 5 0 squeeze 00
> 7 Goto 0 255 0 00
> 8 OpenRead 0 14 0 4 00
> 9 OpenRead 1 2 0 5 00
> 10 OpenRead 12 8 0 keyinfo(1,BINARY) 00
> 11 Null 0 7 0 00
> 12 Integer 31 6 0 00
> 13 Rewind 0 22 0 00
> 14 String8 0 10 0 CVE-% 00
> 15 Column 0 0 11 00
> 16 Function 1 10 9 like(2) 02
> 17 IfNot 9 21 1 00
> 18 Rowid 0 8 0 00
> 19 RowSetTest 7 21 8 0 00
> 20 Gosub 6 32 0 00
> 21 Next 0 14 0 01
> 22 Rewind 0 31 0 00
> 23 String8 0 10 0 TEMP-% 00
> 24 Column 0 0 11 00
> 25 Function 1 10 9 like(2) 02
> 26 IfNot 9 30 1 00
> 27 Rowid 0 8 0 00
> 28 RowSetTest 7 30 8 -1 00
> 29 Gosub 6 32 0 00
> 30 Next 0 23 0 01
> 31 Goto 0 231 0 00
> 32 String8 0 10 0 CVE-% 00
> 33 Column 0 0 11 00
> 34 Function 1 10 9 like(2) 02
> 35 If 9 40 0 00
> 36 String8 0 10 0 TEMP-% 00
> 37 Column 0 0 11 00
> 38 Function 1 10 9 like(2) 02
> 39 IfNot 9 230 1 00
> 40 Column 0 1 9 00
> 41 MustBeInt 9 230 0 00
> 42 NotExists 1 230 9 00
> 43 Column 1 1 12 00
> 44 Eq 1 49 12 collseq(BINARY) 61
> 45 Eq 2 49 12 collseq(BINARY) 61
> 46 Eq 3 49 12 collseq(BINARY) 61
> 47 Eq 4 49 12 collseq(BINARY) 61
> 48 Ne 5 230 12 collseq(BINARY) 69
> 49 Column 0 0 14 00
> 50 IsNull 14 230 0 00
> 51 SeekGe 12 230 14 1 00
> 52 IdxGE 12 230 14 1 01
> 53 Column 1 0 15 00
> 54 Column 0 0 16 00
> 55 Null 0 27 0 00
> 56 Integer 1 28 0 00
> 57 OpenRead 3 18 0 2 00
> 58 OpenRead 13 19 0 keyinfo(1,BINARY) 00
> 59 Column 0 0 29 00
> 60 IsNull 29 68 0 00
> 61 SeekGe 13 68 29 1 00
> 62 IdxGE 13 68 29 1 01
> 63 IdxRowid 13 9 0 00
> 64 Seek 3 9 0 00
> 65 Column 3 1 30 00
> 66 Move 30 27 1 00
> 67 IfZero 28 68 -1 00
> 68 Close 3 0 0 00
> 69 Close 13 0 0 00
> 70 Copy 27 17 0 00
> 71 Null 0 31 0 00
> 72 Integer 101 32 0 00
> 73 Once 0 101 0 00
> 74 Noop 0 0 0 00
> 75 OpenEphemeral 4 2 0 00
> 76 OpenEphemeral 15 0 0 keyinfo(2,BINARY,BINARY) 08
>
> 77 OpenRead 16 6 0 keyinfo(2,BINARY,BINARY) 00
>
> 78 OpenRead 5 4 0 2 00
> 79 OpenRead 17 15 0 keyinfo(2,BINARY,BINARY) 00
>
> 80 Rewind 16 98 33 0 00
> 81 Column 16 1 9 00
> 82 MustBeInt 9 97 0 00
> 83 NotExists 5 97 9 00
> 84 Column 5 1 33 00
> 85 IsNull 33 97 0 00
> 86 SeekGe 17 97 33 1 00
> 87 IdxGE 17 97 33 1 01
> 88 Column 16 0 34 00
> 89 Column 17 0 35 00
> 90 Found 15 96 34 2 00
> 91 MakeRecord 34 2 9 00
> 92 IdxInsert 15 9 0 00
> 93 MakeRecord 34 2 9 00
> 94 NewRowid 4 13 0 00
> 95 Insert 4 9 13 08
> 96 Next 17 87 0 00
> 97 Next 16 81 0 00
> 98 Close 16 0 0 00
> 99 Close 5 0 0 00
> 100 Close 17 0 0 00
> 101 Return 32 0 0 00
> 102 OpenEphemeral 18 3 0 keyinfo(1,BINARY) 00
> 103 Integer 1 36 0 00
> 104 Once 1 113 0 00
> 105 OpenAutoindex 19 3 0 keyinfo(2,BINARY,BINARY) 00
>
> 106 Rewind 4 113 0 00
> 107 Rowid 4 40 0 00
> 108 Column 4 1 38 00
> 109 Column 4 0 39 00
> 110 MakeRecord 38 3 37 00
> 111 IdxInsert 19 37 0 10
> 112 Next 4 107 0 03
> 113 Column 0 0 41 00
> 114 IsNull 41 129 0 00
> 115 SeekGe 19 129 41 1 00
> 116 IdxGE 19 129 41 1 01
> 117 Column 19 1 42 00
> 118 Column 19 1 38 00
> 119 Sequence 18 39 0 00
> 120 Move 42 40 1 00
> 121 MakeRecord 38 3 37 00
> 122 IdxInsert 18 37 0 00
> 123 IfZero 36 126 0 00
> 124 AddImm 36 -1 0 00
> 125 Goto 0 128 0 00
> 126 Last 18 0 0 00
> 127 Delete 18 0 0 00
> 128 Next 19 116 0 00
> 129 Sort 18 133 0 00
> 130 Column 18 2 37 00
> 131 Move 37 31 1 00
> 132 Next 18 130 0 00
> 133 Copy 31 18 0 00
> 134 Column 1 1 19 00
> 135 Column 1 2 20 00
> 136 Column 1 4 21 00
> 137 Null 0 44 0 00
> 138 Integer 1 45 0 00
> 139 OpenRead 8 4 0 6 00
> 140 Null 0 47 0 00
> 141 Integer 170 46 0 00
> 142 OpenRead 20 29 0 keyinfo(3,BINARY,BINARY) 00
>
> 143 Column 0 0 49 00
> 144 IsNull 49 155 0 00
> 145 Column 1 0 50 00
> 146 IsNull 50 155 0 00
> 147 Column 1 1 51 00
> 148 IsNull 51 155 0 00
> 149 SeekGe 20 155 49 3 00
> 150 IdxGE 20 155 49 3 01
> 151 IdxRowid 20 43 0 00
> 152 Seek 8 43 0 00
> 153 RowSetTest 47 155 43 0 00
> 154 Gosub 46 171 0 00
> 155 OpenRead 21 29 0 keyinfo(3,BINARY,BINARY) 00
>
> 156 Column 0 0 52 00
> 157 IsNull 52 170 0 00
> 158 Column 1 0 53 00
> 159 IsNull 53 170 0 00
> 160 String8 0 54 0 00
> 161 SeekGe 21 170 52 3 00
> 162 IdxGE 21 170 52 3 01
> 163 IdxRowid 21 37 0 00
> 164 Seek 8 37 0 00
> 165 Column 8 3 55 00
> 166 String8 0 56 0 00
> 167 Eq 56 170 55 collseq(BINARY) 69
> 168 RowSetTest 47 170 37 1 00
> 169 Gosub 46 171 0 00
> 170 Goto 0 181 0 00
> 171 Column 8 1 55 00
> 172 Column 0 0 56 00
> 173 Ne 56 180 55 collseq(BINARY) 6a
> 174 Column 8 2 57 00
> 175 Column 1 0 58 00
> 176 Ne 58 180 57 collseq(BINARY) 6a
> 177 Column 8 3 59 00
> 178 Move 59 44 1 00
> 179 IfZero 45 181 -1 00
> 180 Return 46 0 0 00
> 181 Close 8 0 0 00
> 182 Copy 44 22 0 00
> 183 Column 0 2 23 00
> 184 Column 0 3 24 00
> 185 Null 0 60 0 00
> 186 Integer 1 61 0 00
> 187 OpenRead 9 18 0 7 00
> 188 OpenRead 22 19 0 keyinfo(1,BINARY) 00
> 189 Column 0 0 62 00
> 190 IsNull 62 198 0 00
> 191 SeekGe 22 198 62 1 00
> 192 IdxGE 22 198 62 1 01
> 193 IdxRowid 22 58 0 00
> 194 Seek 9 58 0 00
> 195 Column 9 6 63 00
> 196 Move 63 60 1 00
> 197 IfZero 61 198 -1 00
> 198 Close 9 0 0 00
> 199 Close 22 0 0 00
> 200 Copy 60 25 0 00
> 201 Null 0 64 0 00
> 202 Integer 1 65 0 00
> 203 OpenRead 10 22 0 5 00
> 204 OpenRead 23 23 0 keyinfo(3,BINARY,BINARY) 00
>
> 205 Column 0 0 66 00
> 206 IsNull 66 218 0 00
> 207 Column 1 0 67 00
> 208 IsNull 67 218 0 00
> 209 Column 1 1 68 00
> 210 IsNull 68 218 0 00
> 211 SeekGe 23 218 66 3 00
> 212 IdxGE 23 218 66 3 01
> 213 IdxRowid 23 58 0 00
> 214 Seek 10 58 0 00
> 215 Column 10 4 69 00
> 216 Move 69 64 1 00
> 217 IfZero 65 218 -1 00
> 218 Close 10 0 0 00
> 219 Close 23 0 0 00
> 220 Copy 64 26 0 00
> 221 MakeRecord 15 12 58 00
> 222 Column 1 0 70 00
> 223 Column 0 0 71 00
> 224 Column 1 1 72 00
> 225 Column 1 2 73 00
> 226 Sequence 11 74 0 00
> 227 Move 58 75 1 00
> 228 MakeRecord 70 6 57 00
> 229 SorterInsert 11 57 0 00
> 230 Return 6 0 0 00
> 231 Close 0 0 0 00
> 232 Close 1 0 0 00
> 233 Close 12 0 0 00
> 234 OpenPseudo 24 58 12 00
> 235 OpenPseudo 25 76 6 00
> 236 SorterSort 11 253 0 00
> 237 SorterData 11 76 0 00
> 238 Column 25 5 58 20
> 239 Column 24 0 15 20
> 240 Column 24 1 16 00
> 241 Column 24 2 17 00
> 242 Column 24 3 18 00
> 243 Column 24 4 19 00
> 244 Column 24 5 20 00
> 245 Column 24 6 21 00
> 246 Column 24 7 22 00
> 247 Column 24 8 23 00
> 248 Column 24 9 24 00
> 249 Column 24 10 25 00
> 250 Column 24 11 26 00
> 251 ResultRow 15 12 0 00
> 252 SorterNext 11 237 0 00
> 253 Close 24 0 0 00
> 254 Halt 0 0 0 00
> 255 Transaction 0 0 0 00
> 256 VerifyCookie 0 27 0 00
> 257 TableLock 0 14 0 source_package_status 00
>
> 258 TableLock 0 2 0 source_packages 00
> 259 TableLock 0 7 0 bugs 00
> 260 TableLock 0 18 0 nvd_data 00
> 261 TableLock 0 5 0 debian_bugs 00
> 262 TableLock 0 4 0 package_notes 00
> 263 TableLock 0 22 0 package_notes_nodsa 00
>
> 264 Goto 0 8 0 00
>
> The *new* explain output:
>
> addr opcode p1 p2 p3 p4 p5 comment
> ---- ------------- ---- ---- ---- ------------- -- -------------
> 0 Init 0 190 0 00
> 1 SorterOpen 11 17 0 k(4,B,B,B,B) 00
> 2 OpenRead 0 14 0 4 00
> 3 OpenRead 1 2 0 5 00
> 4 OpenRead 12 8 0 k(1,nil) 02
> 5 Rewind 0 169 0 00
> 6 Column 0 0 3 00
> 7 Function 1 2 1 like(2) 02
> 8 If 1 12 0 00
> 9 Column 0 0 5 00
> 10 Function 1 4 1 like(2) 02
> 11 IfNot 1 168 1 00
> 12 Column 0 1 6 00
> 13 MustBeInt 6 168 0 00
> 14 NotExists 1 168 6 00
> 15 Column 1 1 1 00
> 16 Eq 7 21 1 (BINARY) 42
> 17 Eq 9 21 1 (BINARY) 42
> 18 Eq 10 21 1 (BINARY) 42
> 19 Eq 11 21 1 (BINARY) 42
> 20 Ne 12 168 1 (BINARY) 52
> 21 Column 0 0 13 00
> 22 SeekGE 12 168 13 1 00
> 23 IdxGT 12 168 13 1 00
> 24 Column 1 0 18 00
> 25 Copy 13 19 0 00
> 26 Null 0 30 0 00
> 27 Integer 1 31 0 00
> 28 OpenRead 3 18 0 2 00
> 29 OpenRead 13 19 0 k(1,nil) 02
> 30 Column 0 0 32 00
> 31 SeekGE 13 37 32 1 00
> 32 IdxGT 13 37 32 1 00
> 33 IdxRowid 13 33 0 00
> 34 Seek 3 33 0 00
> 35 Column 3 1 30 00
> 36 DecrJumpZero 31 37 0 00
> 37 Close 3 0 0 00
> 38 Close 13 0 0 00
> 39 Copy 30 20 0 00
> 40 Null 0 34 0 00
> 41 InitCoroutine 35 66 42 00
> 42 Noop 0 0 0 00
> 43 OpenEphemeral 15 0 0 k(2,B,B) 08
> 44 OpenRead 16 6 0 k(2,nil,nil) 00
> 45 OpenRead 5 4 0 2 00
> 46 OpenRead 17 15 0 k(2,nil,nil) 02
> 47 Rewind 16 62 36 0 00
> 48 Column 16 1 36 00
> 49 MustBeInt 36 61 0 00
> 50 NotExists 5 61 36 00
> 51 Column 5 1 37 00
> 52 SeekGE 17 61 37 1 00
> 53 IdxGT 17 61 37 1 00
>
> 54 Column 16 0 38 00
>
> 55 Column 17 0 39 00
>
> 56 Found 15 60 38 2 00
>
> 57 MakeRecord 38 2 8 00
>
> 58 IdxInsert 15 8 0 00
>
> 59 Yield 35 0 0 00
>
> 60 Next 17 53 0 00
> 61 Next 16 48 0 01
> 62 Close 16 0 0 00
> 63 Close 5 0 0 00
> 64 Close 17 0 0 00
> 65 EndCoroutine 35 0 0 00
> 66 OpenEphemeral 18 3 0 k(1,B) 00
> 67 Integer 1 40 0 00
> 68 InitCoroutine 35 0 42 00
> 69 Yield 35 83 0 00
> 70 Copy 39 41 0 00
> 71 Column 0 0 42 00
> 72 Ne 42 82 41 (BINARY) 51
> 73 Copy 38 34 0 00
> 74 Copy 34 44 0 00
> 75 Sequence 18 45 0 00
> 76 Move 34 46 1 00
> 77 MakeRecord 44 3 43 00
> 78 IdxInsert 18 43 0 00
> 79 IfNotZero 40 82 -1 00
> 80 Last 18 0 0 00
> 81 Delete 18 0 0 00
> 82 Goto 0 69 0 00
> 83 Sort 18 87 0 00
> 84 Column 18 2 41 00
> 85 Move 41 34 1 00
> 86 Next 18 84 0 00
> 87 Copy 34 21 0 00
> 88 Column 1 1 22 00
> 89 Column 1 2 23 00
> 90 Column 1 4 24 00
> 91 Null 0 47 0 00
> 92 Integer 1 48 0 00
> 93 OpenRead 8 4 0 6 00
> 94 Null 0 50 0 00
> 95 Integer 118 49 0 00
> 96 OpenRead 19 29 0 k(3,nil,nil,nil) 02
>
> 97 Column 0 0 52 00
> 98 Column 1 0 53 00
> 99 Column 1 1 54 00
> 100 SeekGE 19 106 52 3 00
> 101 IdxGT 19 106 52 3 00
> 102 IdxRowid 19 55 0 00
> 103 Seek 8 55 0 00
> 104 RowSetTest 50 106 55 0 00
> 105 Gosub 49 119 0 00
> 106 ReopenIdx 19 29 0 k(3,nil,nil,nil) 02
>
> 107 Column 0 0 56 00
> 108 Column 1 0 57 00
> 109 String8 0 58 0 00
> 110 SeekGE 19 118 56 3 00
> 111 IdxGT 19 118 56 3 00
> 112 IdxRowid 19 59 0 00
> 113 Seek 8 59 0 00
> 114 Column 8 3 42 00
> 115 Eq 60 118 42 (BINARY) 52
> 116 RowSetTest 50 118 59 1 00
> 117 Gosub 49 119 0 00
> 118 Goto 0 128 0 00
> 119 Column 19 0 42 00
> 120 Column 0 0 41 00
> 121 Ne 41 127 42 (BINARY) 51
> 122 Column 19 1 61 00
> 123 Column 1 0 62 00
> 124 Ne 62 127 61 (BINARY) 51
> 125 Column 8 3 47 00
> 126 DecrJumpZero 48 128 0 00
> 127 Return 49 0 0 00
> 128 Close 8 0 0 00
> 129 Copy 47 25 0 00
> 130 Column 0 2 26 00
> 131 Column 0 3 27 00
> 132 Null 0 63 0 00
> 133 Integer 1 64 0 00
> 134 OpenRead 9 18 0 7 00
> 135 OpenRead 20 19 0 k(1,nil) 02
> 136 Column 0 0 65 00
> 137 SeekGE 20 143 65 1 00
> 138 IdxGT 20 143 65 1 00
> 139 IdxRowid 20 66 0 00
> 140 Seek 9 66 0 00
> 141 Column 9 6 63 00
> 142 DecrJumpZero 64 143 0 00
> 143 Close 9 0 0 00
> 144 Close 20 0 0 00
> 145 Copy 63 28 0 00
> 146 Null 0 67 0 00
> 147 Integer 1 68 0 00
> 148 OpenRead 10 22 0 5 00
> 149 OpenRead 21 23 0 k(3,nil,nil,nil) 02
>
> 150 Column 0 0 69 00
> 151 Column 1 0 70 00
> 152 Column 1 1 71 00
> 153 SeekGE 21 159 69 3 00
> 154 IdxGT 21 159 69 3 00
> 155 IdxRowid 21 72 0 00
> 156 Seek 10 72 0 00
> 157 Column 10 4 67 00
> 158 DecrJumpZero 68 159 0 00
> 159 Close 10 0 0 00
> 160 Close 21 0 0 00
> 161 Copy 67 29 0 00
> 162 Column 1 0 14 00
> 163 Column 0 0 15 00
> 164 Column 1 1 16 00
> 165 Column 1 2 17 00
> 166 MakeRecord 14 16 73 00
> 167 SorterInsert 11 73 0 00
> 168 Next 0 6 0 01
> 169 Close 0 0 0 00
> 170 Close 1 0 0 00
> 171 Close 12 0 0 00
> 172 OpenPseudo 22 74 17 00
> 173 SorterSort 11 189 0 00
> 174 SorterData 11 74 22 00
> 175 Column 22 4 18 00
> 176 Column 22 5 19 00
> 177 Column 22 6 20 00
> 178 Column 22 7 21 00
> 179 Column 22 8 22 00
> 180 Column 22 9 23 00
> 181 Column 22 10 24 00
> 182 Column 22 11 25 00
> 183 Column 22 12 26 00
> 184 Column 22 13 27 00
> 185 Column 22 14 28 00
> 186 Column 22 15 29 00
> 187 ResultRow 18 12 0 00
> 188 SorterNext 11 174 0 00
> 189 Halt 0 0 0 00
> 190 Transaction 0 0 27 0 01
> 191 TableLock 0 14 0 source_package_status 00
>
> 192 TableLock 0 2 0 source_packages 00
> 193 TableLock 0 7 0 bugs 00
> 194 TableLock 0 18 0 nvd_data 00
> 195 TableLock 0 5 0 debian_bugs 00
> 196 TableLock 0 4 0 package_notes 00
> 197 TableLock 0 22 0 package_notes_nodsa 00
>
> 198 String8 0 2 0 CVE-% 00
> 199 String8 0 4 0 TEMP-% 00
> 200 String8 0 7 0 sid 00
> 201 String8 0 9 0 stretch 00
> 202 String8 0 10 0 jessie 00
> 203 String8 0 11 0 wheezy 00
> 204 String8 0 12 0 squeeze 00
> 205 String8 0 60 0 00
> 206 Goto 0 1 0 00
>
>
> I have not run the query to completion using the new SQLite version.
>
> I will figure out a way to rewrite the query so that it runs
> reasonably fast again (which will address our immediate needs), but
> maybe there is something that can be fixed in the planner as well.
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
--
D. Richard Hipp
drh@sqlite.org
Reply to: