drh
11b0481778
Avoid problems when a query has a GROUP BY and an ORDER BY but no FROM clause.
...
FossilOrigin-Name: e527d96a1e098ade4e9d124b630a8c2ea2ac9b36
2015-04-12 01:22:04 +00:00
dan
2813bde028
Do not assume an index contains unique entries unless it is declared UNIQUE and NOT NULL is specified for all columns. Fix for [7b4fee9f6c].
...
FossilOrigin-Name: e3b1f625518edc0e925116668dca5d25c3232b59
2015-04-11 11:44:27 +00:00
drh
e0997b341b
Provide the BTREE_SEEK_EQ hint to the b-tree layer.
...
FossilOrigin-Name: e750830f1e61160c0c67e35b13e50b35a95b50e1
2015-03-20 14:57:50 +00:00
dan
80103fc614
Fix a problem causing collation sequence names to be dequoted multiple times under some circumstances.
...
FossilOrigin-Name: eddc05e7bb31fae74daa86e0504a3478b99fa0f2
2015-03-20 08:43:59 +00:00
dan
f104abba84
Make SQLite slightly more likely to use an auto-index within a sub-query.
...
FossilOrigin-Name: ab832336f4a28193c4d2b61e833564822a7b86a8
2015-03-16 20:40:00 +00:00
drh
29894b6d2b
When the WHERE clause contains two OR-connected terms with identical
...
operands but different operators, try to combine them into a single term.
Example: (X=A OR X>A) becomes (X>=A).
FossilOrigin-Name: 8bdda827a3d268009297a0216e3d94bf0eceeb2e
2015-03-16 17:48:12 +00:00
drh
c03acf2ea7
Improved comments. No code changes.
...
FossilOrigin-Name: 23f71a26386ff2aff9800fe96cec1dc9c805b5b6
2015-03-16 13:12:34 +00:00
drh
8426636cdc
When a WHERE clause contains disjuncts with the same operands, try to
...
combine them into a single operator. Example: (x=A OR x>A) becomes
(x>=A).
FossilOrigin-Name: 7a3097689d17625fb0dfc4372712f375f3bdb9a1
2015-03-16 12:13:31 +00:00
dan
a3d0c13654
When estimating the number of rows visited by a range scan for which the keys consist of more than one field, consider prefixes of stat4 samples as well as the full samples.
...
FossilOrigin-Name: e1caf93c9ad0ee15d42030af95619f212d3fcf9d
2015-03-14 18:59:58 +00:00
drh
8031462939
Fix the LIKE optimization so that it works even if there are additional
...
range contraints on the column that is subject to the LIKE or GLOB.
FossilOrigin-Name: 984c3fd5261619fb542a5a95dab37707b5d79dbf
2015-03-09 13:01:02 +00:00
drh
a40da62dd4
Always use LIKE optimization range constraints in pairs.
...
FossilOrigin-Name: 0e02dc94fd1bb891d0edd1e34b57e923b17712a7
2015-03-09 12:11:56 +00:00
drh
52fc05ba1c
Fix another problem with the LIKE optimization.
...
FossilOrigin-Name: 465bfc72d252f94778248253142faeba78ceea02
2015-03-07 20:32:49 +00:00
drh
ab87a5e5b8
Remove some code that is commented out.
...
FossilOrigin-Name: 55ff429177acfdab056a16a67361a5381115c6c7
2015-03-07 03:02:38 +00:00
drh
b7c60ba668
Fix problems with reverse order sorting and indexes in the LIKE optimization.
...
FossilOrigin-Name: 564b8fe79475d7584a21078e6098840b8ce6a6e1
2015-03-07 02:51:59 +00:00
drh
16897072b5
Refactor some jump opcodes in the VDBE. Add JumpZeroIncr and DecrJumpZero.
...
Fix the LIKE optimization to work with DESC sort order.
FossilOrigin-Name: 26cb5145bf52f8c3fffa8c69b6c24aee4d974883
2015-03-07 00:57:37 +00:00
drh
a9c18a9067
Test cases added. Comments fixed. Proposed solution for
...
ticket [05f43be8fdda9fbd9].
FossilOrigin-Name: 6b993bd54035b67f4d84941e3f444ca79b7feee1
2015-03-06 20:49:52 +00:00
drh
8f1a7ed33f
Fix the LIKE optimization even when comparing mixed-case BLOBs.
...
FossilOrigin-Name: a58aafdb4e1422b6a8ffc07a67984928bbedf919
2015-03-06 19:47:38 +00:00
drh
f07cf6e2a5
The LIKE optimization must be applied twice, once for strings and a second
...
time for BLOBs. Ticket [05f43be8fdda9f]. This check-in is a proof-of-concept
of how that might be done.
FossilOrigin-Name: 5757e803cb5759b476bbc6453c58340089611420
2015-03-06 16:45:16 +00:00
drh
8e8e7ef363
Ensure that automatic indexes are *not* considered when doing the the subqueries
...
of the OR-optimization.
FossilOrigin-Name: 17890292cf1776b3334fca7eff693cdbea458304
2015-03-02 17:25:00 +00:00
drh
13cc90cfa2
Remove an always-false conditional from constructAutomaticIndex(). Put an
...
assert() in its place to prove that the conditional is always false.
FossilOrigin-Name: 3af300bf6f5bee0b51a4c1ac1dc3879771378bff
2015-02-25 00:24:41 +00:00
dan
2a45cb5c0e
Prevent partial indexes on the table on the left hand side of a LEFT JOIN from being incorrectly qualified by a constraint in the ON clause of the join. This relaxes the rule introduced by the previous commit (as the partial indexes on the table on the rhs of the LEFT JOIN may now be qualified by terms within the ON clause).
...
FossilOrigin-Name: 1d6fb43a576d335d2717e94d28385178c23c81a1
2015-02-24 20:10:49 +00:00
drh
077f06edfa
This additional fix prevents a partial index from being qualified for use
...
if the constraint that qualifies the partial index is part of the ON clause of
a LEFT JOIN.
FossilOrigin-Name: 1a1516e4da26dcee35e6fbb6604ce252faf3d116
2015-02-24 16:48:59 +00:00
drh
36f65bafe5
Make sure partial automatic indexes are not based on terms in the ON clause
...
of a LEFT JOIN. Fix for ticket [2326c258d02ead3].
FossilOrigin-Name: c0f4e308a508183b72ceda447dc3ac778cb85b9f
2015-02-24 16:05:54 +00:00
drh
18b67f3f0d
Fix a bug in the threadtest4.c program. Remove the keyinfo cache as it provides
...
minimal performance improvements, and then only at SQL preparation time, not
at runtime, and it has problems with data races in shared-cache mode. We might
later add the keyinfo cache back but only enable it when shared-cache mode
is off.
FossilOrigin-Name: b7489f9451628c68f1dfc1d457fc161a0921c631
2014-12-12 00:20:37 +00:00
drh
cd934c3d2c
Avoid a potential NULL pointer deference in the sqlite3_stmt_scanstatus()
...
logic.
FossilOrigin-Name: 42d44adc13d52b8dd571c9375eb48298123d5a60
2014-12-05 21:18:19 +00:00
drh
fe32daaeaa
Make sure the WhereTerm objects are fully zeroed when they are allocated.
...
FossilOrigin-Name: fdb667335c2250239a66143aec4235325dec8274
2014-12-05 19:50:58 +00:00
drh
1d32488037
Performance enhancement for single-table queries with many OR-connected
...
WHERE clause terms and multiple indexes with the same left-most columns.
FossilOrigin-Name: 1461d543ac8a3e4a54405067893146c74576bb4e
2014-12-04 20:24:50 +00:00
drh
ab4624d005
Fix an error in the comments from the previous check-in.
...
FossilOrigin-Name: 9660ce541837ccd8df415641a922274e093056aa
2014-11-22 19:52:10 +00:00
drh
7a1bca7e74
Deploy heuristics (well-commented) to better estimate how much unindexed terms
...
in the WHERE clause filter the number of output rows from a single table.
FossilOrigin-Name: 221659945c3f78d3b6789bfe8fdeb8d3ee1fa038
2014-11-22 18:50:44 +00:00
drh
a3898250d4
Remove a redundant test case (probably a copy/paste error). Add an assert()
...
to where.c to ensure that automatic indexes do not have there output row
counts adjusted downward by supplementary constraints.
FossilOrigin-Name: eea47933493c85a85247ad383bd148b06f627d04
2014-11-22 12:22:13 +00:00
drh
fead4ed8f3
Adding the "noskipscan" token to an sqlite_stat1.stat field prevents
...
an index for being used with the skip-scan algorithm.
FossilOrigin-Name: 4461bf045d8eecf98478035efcdba3f41c709bc5
2014-11-18 21:54:31 +00:00
drh
f9df2fbdcd
Adding the "noskipscan" token to an sqlite_stat1.stat field prevents an
...
index for being used with the skip-scan algorithm.
FossilOrigin-Name: 00fe09505792cd0d104b2da9d040f023e30fa871
2014-11-15 19:08:13 +00:00
dan
70273d0bab
Consider using an automatic-index for a scan even if there exists a possible skip-scan that uses one or more "=" operators.
...
FossilOrigin-Name: 93642a65ef3d53ece322ffd85233b68fc9a86c9d
2014-11-14 19:34:20 +00:00
drh
518140ed04
Change the SQLITE_SCANSTAT_EST parameter so that it returns a double for
...
the estimated number of output rows per loop, rather than a 64-bit integer.
Revise the output format for the ".scanstats on" in the shell to make use
of this new capability.
FossilOrigin-Name: f9684000665ae7ef6f89c3773612b8286b8f545a
2014-11-06 03:55:10 +00:00
drh
6d3f91d040
Change the query planner to do a better job of estimating the number rows
...
selected by a BETWEEN operator using STAT4 when both upper and lower bounds
are contained within the same sample.
FossilOrigin-Name: 2d36be5d9a1cdd4fd2d54fc4eeece32a81cbacc1
2014-11-05 19:26:12 +00:00
drh
e0de876e27
Enhance whereLoopCheaperProperSubset(X,Y) so that it does not report true
...
if X uses skip-scan less than Y, since in that case X might
deserve to be cheaper even if it is a proper subset.
FossilOrigin-Name: c106b755369c1f8546e897ecd2ac56fd09d6e885
2014-11-05 13:13:13 +00:00
dan
e2f771b047
Add further tests. Fixes so that compilation without ENABLE_STMT_SCANSTATUS works.
...
FossilOrigin-Name: a2303c719222f1effb51acc6b37930561148c00c
2014-11-03 15:33:17 +00:00
dan
037b5324bd
Remove unused variable from struct WhereInfo. Add some explanatory comments to new code.
...
FossilOrigin-Name: f5313e0c680d9baebefb1cf50ddadedd4418a334
2014-11-03 11:25:32 +00:00
dan
43764a8efb
Minor performance enhancements to SQLITE_ENABLE_STMT_SCANSTATUS code.
...
FossilOrigin-Name: f13d6ba8a72d75838c4aaf85326c1129da027f8b
2014-11-01 21:00:04 +00:00
dan
6f9702ed4d
If SQLITE_ENABLE_STMT_SCANSTATUS is defined, record the number of times each VDBE opcode is executed. Derive the values returned by sqlite3_stmt_scanstatus() from these records on demand.
...
FossilOrigin-Name: 9ea37422a8cc2fce51bb10508e5e90f40fd4b511
2014-11-01 20:38:06 +00:00
dan
89e71646df
Minor fixes and documentation improvements for sqlite3_stmt_scanstatus().
...
FossilOrigin-Name: 8d8cc9608d30bb65fffcfe488e904411cbbc7f41
2014-11-01 18:08:04 +00:00
dan
04489b6dce
Add the experimental sqlite3_stmt_scanstatus() API.
...
FossilOrigin-Name: 6a9bab34aeb6a01b612211a28c140de60a3e883c
2014-10-31 20:11:32 +00:00
drh
c3ef4fa88a
Trivial simplification to the automatic index logic.
...
FossilOrigin-Name: 23073a053931de324323f631a6613086786af411
2014-10-28 15:58:50 +00:00
drh
d05ab6aacf
Increase the resolution of the second parameter to the likelihood() SQL
...
function (the probability value) so that it can handle probabilities
as small as 0.00000001. Formerly, it ran out of precision at 0.001.
FossilOrigin-Name: 0f08924fe0c52a85a103f67bee9809e0f8f884b0
2014-10-25 13:42:16 +00:00
drh
051575cbf4
Do not use virtual (and hence redundant) WHERE-clause terms to restrict the
...
content of a automatic partial index. Show when an automatic partial index
is used in the EXPLAIN QUERY PLAN output.
FossilOrigin-Name: b9ad601eab1d7298d369267eb697c7fa1bc16985
2014-10-25 12:28:25 +00:00
drh
059b2d50e1
Enhance the automatic index logic so that it creates a partial index when
...
doing so gives the same answer for less work.
FossilOrigin-Name: d95d0313c447f5baeabdb17284d8606331ab7d49
2014-10-24 19:28:09 +00:00
drh
4dd96a8315
Honor a high likelihood() on range constraints.
...
FossilOrigin-Name: 401235edf40fcd665eaf426cf5155ac6855e8537
2014-10-24 15:26:29 +00:00
drh
9769efcc4c
Get the likelihood() functions working on operators like BETWEEN that
...
create virtual terms in the WHERE-clause analysis.
FossilOrigin-Name: 03d0498d0f24bec2383d5d79edf25069effecd59
2014-10-24 14:32:21 +00:00
drh
d7d7147022
Change the 0x800 bit of SQLITE_TESTCTRL_OPTIMIZATIONS so that it disables
...
the loading of STAT3 and STAT4 content, not just the using of that content.
Change the internal name of that bit to SQLITE_Stat34.
FossilOrigin-Name: ca3b00c44ec52d209642a5ba9ef82e085fac39db
2014-10-22 19:57:16 +00:00
drh
9f07cf7b2e
Take steps to avoid misestimating range query costs based on STAT4 data
...
due to the roundoff error of converting from integers to LogEst and back
to integers.
FossilOrigin-Name: 3c933bf95f291f7957580d823dce92c981375a5c
2014-10-22 15:27:05 +00:00