4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
12 ** This file contains code associated with the ANALYZE command.
14 ** The ANALYZE command gather statistics about the content of tables
15 ** and indices. These statistics are made available to the query planner
16 ** to help it make better decisions about how to perform queries.
18 ** The following system tables are or have been supported:
20 ** CREATE TABLE sqlite_stat1(tbl, idx, stat);
21 ** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample);
22 ** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample);
24 ** Additional tables might be added in future releases of SQLite.
25 ** The sqlite_stat2 table is not created or used unless the SQLite version
26 ** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled
27 ** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated.
28 ** The sqlite_stat2 table is superceded by sqlite_stat3, which is only
29 ** created and used by SQLite versions 3.7.9 and later and with
30 ** SQLITE_ENABLE_STAT3 defined. The fucntionality of sqlite_stat3
31 ** is a superset of sqlite_stat2.
33 ** Format of sqlite_stat1:
35 ** There is normally one row per index, with the index identified by the
36 ** name in the idx column. The tbl column is the name of the table to
37 ** which the index belongs. In each such row, the stat column will be
38 ** a string consisting of a list of integers. The first integer in this
39 ** list is the number of rows in the index and in the table. The second
40 ** integer is the average number of rows in the index that have the same
41 ** value in the first column of the index. The third integer is the average
42 ** number of rows in the index that have the same value for the first two
43 ** columns. The N-th integer (for N>1) is the average number of rows in
44 ** the index which have the same value for the first N-1 columns. For
45 ** a K-column index, there will be K+1 integers in the stat column. If
46 ** the index is unique, then the last integer will be 1.
48 ** The list of integers in the stat column can optionally be followed
49 ** by the keyword "unordered". The "unordered" keyword, if it is present,
50 ** must be separated from the last integer by a single space. If the
51 ** "unordered" keyword is present, then the query planner assumes that
52 ** the index is unordered and will not use the index for a range query.
54 ** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
55 ** column contains a single integer which is the (estimated) number of
56 ** rows in the table identified by sqlite_stat1.tbl.
58 ** Format of sqlite_stat2:
60 ** The sqlite_stat2 is only created and is only used if SQLite is compiled
61 ** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
62 ** 3.6.18 and 3.7.8. The "stat2" table contains additional information
63 ** about the distribution of keys within an index. The index is identified by
64 ** the "idx" column and the "tbl" column is the name of the table to which
65 ** the index belongs. There are usually 10 rows in the sqlite_stat2
66 ** table for each index.
68 ** The sqlite_stat2 entries for an index that have sampleno between 0 and 9
69 ** inclusive are samples of the left-most key value in the index taken at
70 ** evenly spaced points along the index. Let the number of samples be S
71 ** (10 in the standard build) and let C be the number of rows in the index.
72 ** Then the sampled rows are given by:
74 ** rownumber = (i*C*2 + C)/(S*2)
76 ** For i between 0 and S-1. Conceptually, the index space is divided into
77 ** S uniform buckets and the samples are the middle row from each bucket.
79 ** The format for sqlite_stat2 is recorded here for legacy reference. This
80 ** version of SQLite does not support sqlite_stat2. It neither reads nor
81 ** writes the sqlite_stat2 table. This version of SQLite only supports
84 ** Format for sqlite_stat3:
86 ** The sqlite_stat3 is an enhancement to sqlite_stat2. A new name is
87 ** used to avoid compatibility problems.
89 ** The format of the sqlite_stat3 table is similar to the format of
90 ** the sqlite_stat2 table. There are multiple entries for each index.
91 ** The idx column names the index and the tbl column is the table of the
92 ** index. If the idx and tbl columns are the same, then the sample is
93 ** of the INTEGER PRIMARY KEY. The sample column is a value taken from
94 ** the left-most column of the index. The nEq column is the approximate
95 ** number of entires in the index whose left-most column exactly matches
96 ** the sample. nLt is the approximate number of entires whose left-most
97 ** column is less than the sample. The nDLt column is the approximate
98 ** number of distinct left-most entries in the index that are less than
101 ** Future versions of SQLite might change to store a string containing
102 ** multiple integers values in the nDLt column of sqlite_stat3. The first
103 ** integer will be the number of prior index entires that are distinct in
104 ** the left-most column. The second integer will be the number of prior index
105 ** entries that are distinct in the first two columns. The third integer
106 ** will be the number of prior index entries that are distinct in the first
107 ** three columns. And so forth. With that extension, the nDLt field is
108 ** similar in function to the sqlite_stat1.stat field.
110 ** There can be an arbitrary number of sqlite_stat3 entries per index.
111 ** The ANALYZE command will typically generate sqlite_stat3 tables
112 ** that contain between 10 and 40 samples which are distributed across
113 ** the key space, though not uniformly, and which include samples with
114 ** largest possible nEq values.
116 #ifndef SQLITE_OMIT_ANALYZE
117 #include "sqliteInt.h"
120 ** This routine generates code that opens the sqlite_stat1 table for
121 ** writing with cursor iStatCur. If the library was built with the
122 ** SQLITE_ENABLE_STAT3 macro defined, then the sqlite_stat3 table is
123 ** opened for writing using cursor (iStatCur+1)
125 ** If the sqlite_stat1 tables does not previously exist, it is created.
126 ** Similarly, if the sqlite_stat3 table does not exist and the library
127 ** is compiled with SQLITE_ENABLE_STAT3 defined, it is created.
129 ** Argument zWhere may be a pointer to a buffer containing a table name,
130 ** or it may be a NULL pointer. If it is not NULL, then all entries in
131 ** the sqlite_stat1 and (if applicable) sqlite_stat3 tables associated
132 ** with the named table are deleted. If zWhere==0, then code is generated
133 ** to delete all stat table entries.
135 static void openStatTable(
136 Parse
*pParse
, /* Parsing context */
137 int iDb
, /* The database we are looking in */
138 int iStatCur
, /* Open the sqlite_stat1 table on this cursor */
139 const char *zWhere
, /* Delete entries for this table or index */
140 const char *zWhereType
/* Either "tbl" or "idx" */
142 static const struct {
146 { "sqlite_stat1", "tbl,idx,stat" },
147 #ifdef SQLITE_ENABLE_STAT3
148 { "sqlite_stat3", "tbl,idx,neq,nlt,ndlt,sample" },
152 int aRoot
[] = {0, 0};
153 u8 aCreateTbl
[] = {0, 0};
156 sqlite3
*db
= pParse
->db
;
158 Vdbe
*v
= sqlite3GetVdbe(pParse
);
160 assert( sqlite3BtreeHoldsAllMutexes(db
) );
161 assert( sqlite3VdbeDb(v
)==db
);
164 /* Create new statistic tables if they do not exist, or clear them
165 ** if they do already exist.
167 for(i
=0; i
<ArraySize(aTable
); i
++){
168 const char *zTab
= aTable
[i
].zName
;
170 if( (pStat
= sqlite3FindTable(db
, zTab
, pDb
->zName
))==0 ){
171 /* The sqlite_stat[12] table does not exist. Create it. Note that a
172 ** side-effect of the CREATE TABLE statement is to leave the rootpage
173 ** of the new table in register pParse->regRoot. This is important
174 ** because the OpenWrite opcode below will be needing it. */
175 sqlite3NestedParse(pParse
,
176 "CREATE TABLE %Q.%s(%s)", pDb
->zName
, zTab
, aTable
[i
].zCols
178 aRoot
[i
] = pParse
->regRoot
;
181 /* The table already exists. If zWhere is not NULL, delete all entries
182 ** associated with the table zWhere. If zWhere is NULL, delete the
183 ** entire contents of the table. */
184 aRoot
[i
] = pStat
->tnum
;
185 sqlite3TableLock(pParse
, iDb
, aRoot
[i
], 1, zTab
);
187 sqlite3NestedParse(pParse
,
188 "DELETE FROM %Q.%s WHERE %s=%Q", pDb
->zName
, zTab
, zWhereType
, zWhere
191 /* The sqlite_stat[12] table already exists. Delete all rows. */
192 sqlite3VdbeAddOp2(v
, OP_Clear
, aRoot
[i
], iDb
);
197 /* Open the sqlite_stat[13] tables for writing. */
198 for(i
=0; i
<ArraySize(aTable
); i
++){
199 sqlite3VdbeAddOp3(v
, OP_OpenWrite
, iStatCur
+i
, aRoot
[i
], iDb
);
200 sqlite3VdbeChangeP4(v
, -1, (char *)3, P4_INT32
);
201 sqlite3VdbeChangeP5(v
, aCreateTbl
[i
]);
206 ** Recommended number of samples for sqlite_stat3
208 #ifndef SQLITE_STAT3_SAMPLES
209 # define SQLITE_STAT3_SAMPLES 24
213 ** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() -
214 ** share an instance of the following structure to hold their state
217 typedef struct Stat3Accum Stat3Accum
;
219 tRowcnt nRow
; /* Number of rows in the entire table */
220 tRowcnt nPSample
; /* How often to do a periodic sample */
221 int iMin
; /* Index of entry with minimum nEq and hash */
222 int mxSample
; /* Maximum number of samples to accumulate */
223 int nSample
; /* Current number of samples */
224 u32 iPrn
; /* Pseudo-random number used for sampling */
226 i64 iRowid
; /* Rowid in main table of the key */
227 tRowcnt nEq
; /* sqlite_stat3.nEq */
228 tRowcnt nLt
; /* sqlite_stat3.nLt */
229 tRowcnt nDLt
; /* sqlite_stat3.nDLt */
230 u8 isPSample
; /* True if a periodic sample */
231 u32 iHash
; /* Tiebreaker hash */
232 } *a
; /* An array of samples */
235 #ifdef SQLITE_ENABLE_STAT3
237 ** Implementation of the stat3_init(C,S) SQL function. The two parameters
238 ** are the number of rows in the table or index (C) and the number of samples
239 ** to accumulate (S).
241 ** This routine allocates the Stat3Accum object.
243 ** The return value is the Stat3Accum object (P).
245 static void stat3Init(
246 sqlite3_context
*context
,
255 UNUSED_PARAMETER(argc
);
256 nRow
= (tRowcnt
)sqlite3_value_int64(argv
[0]);
257 mxSample
= sqlite3_value_int(argv
[1]);
258 n
= sizeof(*p
) + sizeof(p
->a
[0])*mxSample
;
259 p
= sqlite3_malloc( n
);
261 sqlite3_result_error_nomem(context
);
265 p
->a
= (struct Stat3Sample
*)&p
[1];
267 p
->mxSample
= mxSample
;
268 p
->nPSample
= p
->nRow
/(mxSample
/3+1) + 1;
269 sqlite3_randomness(sizeof(p
->iPrn
), &p
->iPrn
);
270 sqlite3_result_blob(context
, p
, sizeof(p
), sqlite3_free
);
272 static const FuncDef stat3InitFuncdef
= {
274 SQLITE_UTF8
, /* iPrefEnc */
278 stat3Init
, /* xFunc */
281 "stat3_init", /* zName */
288 ** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function. The
289 ** arguments describe a single key instance. This routine makes the
290 ** decision about whether or not to retain this key for the sqlite_stat3
293 ** The return value is NULL.
295 static void stat3Push(
296 sqlite3_context
*context
,
300 Stat3Accum
*p
= (Stat3Accum
*)sqlite3_value_blob(argv
[4]);
301 tRowcnt nEq
= sqlite3_value_int64(argv
[0]);
302 tRowcnt nLt
= sqlite3_value_int64(argv
[1]);
303 tRowcnt nDLt
= sqlite3_value_int64(argv
[2]);
304 i64 rowid
= sqlite3_value_int64(argv
[3]);
308 struct Stat3Sample
*pSample
;
312 UNUSED_PARAMETER(context
);
313 UNUSED_PARAMETER(argc
);
315 h
= p
->iPrn
= p
->iPrn
*1103515245 + 12345;
316 if( (nLt
/p
->nPSample
)!=((nEq
+nLt
)/p
->nPSample
) ){
317 doInsert
= isPSample
= 1;
318 }else if( p
->nSample
<p
->mxSample
){
321 if( nEq
>p
->a
[iMin
].nEq
|| (nEq
==p
->a
[iMin
].nEq
&& h
>p
->a
[iMin
].iHash
) ){
325 if( !doInsert
) return;
326 if( p
->nSample
==p
->mxSample
){
327 assert( p
->nSample
- iMin
- 1 >= 0 );
328 memmove(&p
->a
[iMin
], &p
->a
[iMin
+1], sizeof(p
->a
[0])*(p
->nSample
-iMin
-1));
329 pSample
= &p
->a
[p
->nSample
-1];
331 pSample
= &p
->a
[p
->nSample
++];
333 pSample
->iRowid
= rowid
;
336 pSample
->nDLt
= nDLt
;
338 pSample
->isPSample
= isPSample
;
340 /* Find the new minimum */
341 if( p
->nSample
==p
->mxSample
){
344 while( pSample
->isPSample
){
347 assert( i
<p
->nSample
);
352 for(i
++, pSample
++; i
<p
->nSample
; i
++, pSample
++){
353 if( pSample
->isPSample
) continue;
355 || (pSample
->nEq
==nEq
&& pSample
->iHash
<h
)
365 static const FuncDef stat3PushFuncdef
= {
367 SQLITE_UTF8
, /* iPrefEnc */
371 stat3Push
, /* xFunc */
374 "stat3_push", /* zName */
380 ** Implementation of the stat3_get(P,N,...) SQL function. This routine is
381 ** used to query the results. Content is returned for the Nth sqlite_stat3
382 ** row where N is between 0 and S-1 and S is the number of samples. The
383 ** value returned depends on the number of arguments.
385 ** argc==2 result: rowid
386 ** argc==3 result: nEq
387 ** argc==4 result: nLt
388 ** argc==5 result: nDLt
390 static void stat3Get(
391 sqlite3_context
*context
,
395 int n
= sqlite3_value_int(argv
[1]);
396 Stat3Accum
*p
= (Stat3Accum
*)sqlite3_value_blob(argv
[0]);
399 if( p
->nSample
<=n
) return;
401 case 2: sqlite3_result_int64(context
, p
->a
[n
].iRowid
); break;
402 case 3: sqlite3_result_int64(context
, p
->a
[n
].nEq
); break;
403 case 4: sqlite3_result_int64(context
, p
->a
[n
].nLt
); break;
404 default: sqlite3_result_int64(context
, p
->a
[n
].nDLt
); break;
407 static const FuncDef stat3GetFuncdef
= {
409 SQLITE_UTF8
, /* iPrefEnc */
413 stat3Get
, /* xFunc */
416 "stat3_get", /* zName */
420 #endif /* SQLITE_ENABLE_STAT3 */
426 ** Generate code to do an analysis of all indices associated with
429 static void analyzeOneTable(
430 Parse
*pParse
, /* Parser context */
431 Table
*pTab
, /* Table whose indices are to be analyzed */
432 Index
*pOnlyIdx
, /* If not NULL, only analyze this one index */
433 int iStatCur
, /* Index of VdbeCursor that writes the sqlite_stat1 table */
434 int iMem
/* Available memory locations begin here */
436 sqlite3
*db
= pParse
->db
; /* Database handle */
437 Index
*pIdx
; /* An index to being analyzed */
438 int iIdxCur
; /* Cursor open on index being analyzed */
439 Vdbe
*v
; /* The virtual machine being built up */
440 int i
; /* Loop counter */
441 int topOfLoop
; /* The top of the loop */
442 int endOfLoop
; /* The end of the loop */
443 int jZeroRows
= -1; /* Jump from here if number of rows is zero */
444 int iDb
; /* Index of database containing pTab */
445 int regTabname
= iMem
++; /* Register containing table name */
446 int regIdxname
= iMem
++; /* Register containing index name */
447 int regStat1
= iMem
++; /* The stat column of sqlite_stat1 */
448 #ifdef SQLITE_ENABLE_STAT3
449 int regNumEq
= regStat1
; /* Number of instances. Same as regStat1 */
450 int regNumLt
= iMem
++; /* Number of keys less than regSample */
451 int regNumDLt
= iMem
++; /* Number of distinct keys less than regSample */
452 int regSample
= iMem
++; /* The next sample value */
453 int regRowid
= regSample
; /* Rowid of a sample */
454 int regAccum
= iMem
++; /* Register to hold Stat3Accum object */
455 int regLoop
= iMem
++; /* Loop counter */
456 int regCount
= iMem
++; /* Number of rows in the table or index */
457 int regTemp1
= iMem
++; /* Intermediate register */
458 int regTemp2
= iMem
++; /* Intermediate register */
459 int once
= 1; /* One-time initialization */
460 int shortJump
= 0; /* Instruction address */
461 int iTabCur
= pParse
->nTab
++; /* Table cursor */
463 int regCol
= iMem
++; /* Content of a column in analyzed table */
464 int regRec
= iMem
++; /* Register holding completed record */
465 int regTemp
= iMem
++; /* Temporary use register */
466 int regNewRowid
= iMem
++; /* Rowid for the inserted record */
469 v
= sqlite3GetVdbe(pParse
);
470 if( v
==0 || NEVER(pTab
==0) ){
474 /* Do not gather statistics on views or virtual tables */
477 if( memcmp(pTab
->zName
, "sqlite_", 7)==0 ){
478 /* Do not gather statistics on system tables */
481 assert( sqlite3BtreeHoldsAllMutexes(db
) );
482 iDb
= sqlite3SchemaToIndex(db
, pTab
->pSchema
);
484 assert( sqlite3SchemaMutexHeld(db
, iDb
, 0) );
485 #ifndef SQLITE_OMIT_AUTHORIZATION
486 if( sqlite3AuthCheck(pParse
, SQLITE_ANALYZE
, pTab
->zName
, 0,
487 db
->aDb
[iDb
].zName
) ){
492 /* Establish a read-lock on the table at the shared-cache level. */
493 sqlite3TableLock(pParse
, iDb
, pTab
->tnum
, 0, pTab
->zName
);
495 iIdxCur
= pParse
->nTab
++;
496 sqlite3VdbeAddOp4(v
, OP_String8
, 0, regTabname
, 0, pTab
->zName
, 0);
497 for(pIdx
=pTab
->pIndex
; pIdx
; pIdx
=pIdx
->pNext
){
500 int addrIfNot
= 0; /* address of OP_IfNot */
501 int *aChngAddr
; /* Array of jump instruction addresses */
503 if( pOnlyIdx
&& pOnlyIdx
!=pIdx
) continue;
504 VdbeNoopComment((v
, "Begin analysis of %s", pIdx
->zName
));
505 nCol
= pIdx
->nColumn
;
506 aChngAddr
= sqlite3DbMallocRaw(db
, sizeof(int)*nCol
);
507 if( aChngAddr
==0 ) continue;
508 pKey
= sqlite3IndexKeyinfo(pParse
, pIdx
);
509 if( iMem
+1+(nCol
*2)>pParse
->nMem
){
510 pParse
->nMem
= iMem
+1+(nCol
*2);
513 /* Open a cursor to the index to be analyzed. */
514 assert( iDb
==sqlite3SchemaToIndex(db
, pIdx
->pSchema
) );
515 sqlite3VdbeAddOp4(v
, OP_OpenRead
, iIdxCur
, pIdx
->tnum
, iDb
,
516 (char *)pKey
, P4_KEYINFO_HANDOFF
);
517 VdbeComment((v
, "%s", pIdx
->zName
));
519 /* Populate the register containing the index name. */
520 sqlite3VdbeAddOp4(v
, OP_String8
, 0, regIdxname
, 0, pIdx
->zName
, 0);
522 #ifdef SQLITE_ENABLE_STAT3
525 sqlite3OpenTable(pParse
, iTabCur
, iDb
, pTab
, OP_OpenRead
);
527 sqlite3VdbeAddOp2(v
, OP_Count
, iIdxCur
, regCount
);
528 sqlite3VdbeAddOp2(v
, OP_Integer
, SQLITE_STAT3_SAMPLES
, regTemp1
);
529 sqlite3VdbeAddOp2(v
, OP_Integer
, 0, regNumEq
);
530 sqlite3VdbeAddOp2(v
, OP_Integer
, 0, regNumLt
);
531 sqlite3VdbeAddOp2(v
, OP_Integer
, -1, regNumDLt
);
532 sqlite3VdbeAddOp3(v
, OP_Null
, 0, regSample
, regAccum
);
533 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regCount
, regAccum
,
534 (char*)&stat3InitFuncdef
, P4_FUNCDEF
);
535 sqlite3VdbeChangeP5(v
, 2);
536 #endif /* SQLITE_ENABLE_STAT3 */
538 /* The block of memory cells initialized here is used as follows.
541 ** The total number of rows in the table.
543 ** iMem+1 .. iMem+nCol:
544 ** Number of distinct entries in index considering the
545 ** left-most N columns only, where N is between 1 and nCol,
548 ** iMem+nCol+1 .. Mem+2*nCol:
549 ** Previous value of indexed columns, from left to right.
551 ** Cells iMem through iMem+nCol are initialized to 0. The others are
552 ** initialized to contain an SQL NULL.
554 for(i
=0; i
<=nCol
; i
++){
555 sqlite3VdbeAddOp2(v
, OP_Integer
, 0, iMem
+i
);
557 for(i
=0; i
<nCol
; i
++){
558 sqlite3VdbeAddOp2(v
, OP_Null
, 0, iMem
+nCol
+i
+1);
561 /* Start the analysis loop. This loop runs through all the entries in
562 ** the index b-tree. */
563 endOfLoop
= sqlite3VdbeMakeLabel(v
);
564 sqlite3VdbeAddOp2(v
, OP_Rewind
, iIdxCur
, endOfLoop
);
565 topOfLoop
= sqlite3VdbeCurrentAddr(v
);
566 sqlite3VdbeAddOp2(v
, OP_AddImm
, iMem
, 1); /* Increment row counter */
568 for(i
=0; i
<nCol
; i
++){
570 sqlite3VdbeAddOp3(v
, OP_Column
, iIdxCur
, i
, regCol
);
572 /* Always record the very first row */
573 addrIfNot
= sqlite3VdbeAddOp1(v
, OP_IfNot
, iMem
+1);
575 assert( pIdx
->azColl
!=0 );
576 assert( pIdx
->azColl
[i
]!=0 );
577 pColl
= sqlite3LocateCollSeq(pParse
, pIdx
->azColl
[i
]);
578 aChngAddr
[i
] = sqlite3VdbeAddOp4(v
, OP_Ne
, regCol
, 0, iMem
+nCol
+i
+1,
579 (char*)pColl
, P4_COLLSEQ
);
580 sqlite3VdbeChangeP5(v
, SQLITE_NULLEQ
);
581 VdbeComment((v
, "jump if column %d changed", i
));
582 #ifdef SQLITE_ENABLE_STAT3
584 sqlite3VdbeAddOp2(v
, OP_AddImm
, regNumEq
, 1);
585 VdbeComment((v
, "incr repeat count"));
589 sqlite3VdbeAddOp2(v
, OP_Goto
, 0, endOfLoop
);
590 for(i
=0; i
<nCol
; i
++){
591 sqlite3VdbeJumpHere(v
, aChngAddr
[i
]); /* Set jump dest for the OP_Ne */
593 sqlite3VdbeJumpHere(v
, addrIfNot
); /* Jump dest for OP_IfNot */
594 #ifdef SQLITE_ENABLE_STAT3
595 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regNumEq
, regTemp2
,
596 (char*)&stat3PushFuncdef
, P4_FUNCDEF
);
597 sqlite3VdbeChangeP5(v
, 5);
598 sqlite3VdbeAddOp3(v
, OP_Column
, iIdxCur
, pIdx
->nColumn
, regRowid
);
599 sqlite3VdbeAddOp3(v
, OP_Add
, regNumEq
, regNumLt
, regNumLt
);
600 sqlite3VdbeAddOp2(v
, OP_AddImm
, regNumDLt
, 1);
601 sqlite3VdbeAddOp2(v
, OP_Integer
, 1, regNumEq
);
604 sqlite3VdbeAddOp2(v
, OP_AddImm
, iMem
+i
+1, 1);
605 sqlite3VdbeAddOp3(v
, OP_Column
, iIdxCur
, i
, iMem
+nCol
+i
+1);
607 sqlite3DbFree(db
, aChngAddr
);
609 /* Always jump here after updating the iMem+1...iMem+1+nCol counters */
610 sqlite3VdbeResolveLabel(v
, endOfLoop
);
612 sqlite3VdbeAddOp2(v
, OP_Next
, iIdxCur
, topOfLoop
);
613 sqlite3VdbeAddOp1(v
, OP_Close
, iIdxCur
);
614 #ifdef SQLITE_ENABLE_STAT3
615 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regNumEq
, regTemp2
,
616 (char*)&stat3PushFuncdef
, P4_FUNCDEF
);
617 sqlite3VdbeChangeP5(v
, 5);
618 sqlite3VdbeAddOp2(v
, OP_Integer
, -1, regLoop
);
620 sqlite3VdbeAddOp2(v
, OP_AddImm
, regLoop
, 1);
621 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regAccum
, regTemp1
,
622 (char*)&stat3GetFuncdef
, P4_FUNCDEF
);
623 sqlite3VdbeChangeP5(v
, 2);
624 sqlite3VdbeAddOp1(v
, OP_IsNull
, regTemp1
);
625 sqlite3VdbeAddOp3(v
, OP_NotExists
, iTabCur
, shortJump
, regTemp1
);
626 sqlite3VdbeAddOp3(v
, OP_Column
, iTabCur
, pIdx
->aiColumn
[0], regSample
);
627 sqlite3ColumnDefault(v
, pTab
, pIdx
->aiColumn
[0], regSample
);
628 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regAccum
, regNumEq
,
629 (char*)&stat3GetFuncdef
, P4_FUNCDEF
);
630 sqlite3VdbeChangeP5(v
, 3);
631 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regAccum
, regNumLt
,
632 (char*)&stat3GetFuncdef
, P4_FUNCDEF
);
633 sqlite3VdbeChangeP5(v
, 4);
634 sqlite3VdbeAddOp4(v
, OP_Function
, 1, regAccum
, regNumDLt
,
635 (char*)&stat3GetFuncdef
, P4_FUNCDEF
);
636 sqlite3VdbeChangeP5(v
, 5);
637 sqlite3VdbeAddOp4(v
, OP_MakeRecord
, regTabname
, 6, regRec
, "bbbbbb", 0);
638 sqlite3VdbeAddOp2(v
, OP_NewRowid
, iStatCur
+1, regNewRowid
);
639 sqlite3VdbeAddOp3(v
, OP_Insert
, iStatCur
+1, regRec
, regNewRowid
);
640 sqlite3VdbeAddOp2(v
, OP_Goto
, 0, shortJump
);
641 sqlite3VdbeJumpHere(v
, shortJump
+2);
644 /* Store the results in sqlite_stat1.
646 ** The result is a single row of the sqlite_stat1 table. The first
647 ** two columns are the names of the table and index. The third column
648 ** is a string composed of a list of integer statistics about the
649 ** index. The first integer in the list is the total number of entries
650 ** in the index. There is one additional integer in the list for each
651 ** column of the table. This additional integer is a guess of how many
652 ** rows of the table the index will select. If D is the count of distinct
653 ** values and K is the total number of rows, then the integer is computed
658 ** If K==0 then no entry is made into the sqlite_stat1 table.
659 ** If K>0 then it is always the case the D>0 so division by zero
660 ** is never possible.
662 sqlite3VdbeAddOp2(v
, OP_SCopy
, iMem
, regStat1
);
664 jZeroRows
= sqlite3VdbeAddOp1(v
, OP_IfNot
, iMem
);
666 for(i
=0; i
<nCol
; i
++){
667 sqlite3VdbeAddOp4(v
, OP_String8
, 0, regTemp
, 0, " ", 0);
668 sqlite3VdbeAddOp3(v
, OP_Concat
, regTemp
, regStat1
, regStat1
);
669 sqlite3VdbeAddOp3(v
, OP_Add
, iMem
, iMem
+i
+1, regTemp
);
670 sqlite3VdbeAddOp2(v
, OP_AddImm
, regTemp
, -1);
671 sqlite3VdbeAddOp3(v
, OP_Divide
, iMem
+i
+1, regTemp
, regTemp
);
672 sqlite3VdbeAddOp1(v
, OP_ToInt
, regTemp
);
673 sqlite3VdbeAddOp3(v
, OP_Concat
, regTemp
, regStat1
, regStat1
);
675 sqlite3VdbeAddOp4(v
, OP_MakeRecord
, regTabname
, 3, regRec
, "aaa", 0);
676 sqlite3VdbeAddOp2(v
, OP_NewRowid
, iStatCur
, regNewRowid
);
677 sqlite3VdbeAddOp3(v
, OP_Insert
, iStatCur
, regRec
, regNewRowid
);
678 sqlite3VdbeChangeP5(v
, OPFLAG_APPEND
);
681 /* If the table has no indices, create a single sqlite_stat1 entry
682 ** containing NULL as the index name and the row count as the content.
684 if( pTab
->pIndex
==0 ){
685 sqlite3VdbeAddOp3(v
, OP_OpenRead
, iIdxCur
, pTab
->tnum
, iDb
);
686 VdbeComment((v
, "%s", pTab
->zName
));
687 sqlite3VdbeAddOp2(v
, OP_Count
, iIdxCur
, regStat1
);
688 sqlite3VdbeAddOp1(v
, OP_Close
, iIdxCur
);
689 jZeroRows
= sqlite3VdbeAddOp1(v
, OP_IfNot
, regStat1
);
691 sqlite3VdbeJumpHere(v
, jZeroRows
);
692 jZeroRows
= sqlite3VdbeAddOp0(v
, OP_Goto
);
694 sqlite3VdbeAddOp2(v
, OP_Null
, 0, regIdxname
);
695 sqlite3VdbeAddOp4(v
, OP_MakeRecord
, regTabname
, 3, regRec
, "aaa", 0);
696 sqlite3VdbeAddOp2(v
, OP_NewRowid
, iStatCur
, regNewRowid
);
697 sqlite3VdbeAddOp3(v
, OP_Insert
, iStatCur
, regRec
, regNewRowid
);
698 sqlite3VdbeChangeP5(v
, OPFLAG_APPEND
);
699 if( pParse
->nMem
<regRec
) pParse
->nMem
= regRec
;
700 sqlite3VdbeJumpHere(v
, jZeroRows
);
705 ** Generate code that will cause the most recent index analysis to
706 ** be loaded into internal hash tables where is can be used.
708 static void loadAnalysis(Parse
*pParse
, int iDb
){
709 Vdbe
*v
= sqlite3GetVdbe(pParse
);
711 sqlite3VdbeAddOp1(v
, OP_LoadAnalysis
, iDb
);
716 ** Generate code that will do an analysis of an entire database
718 static void analyzeDatabase(Parse
*pParse
, int iDb
){
719 sqlite3
*db
= pParse
->db
;
720 Schema
*pSchema
= db
->aDb
[iDb
].pSchema
; /* Schema of database iDb */
725 sqlite3BeginWriteOperation(pParse
, 0, iDb
);
726 iStatCur
= pParse
->nTab
;
728 openStatTable(pParse
, iDb
, iStatCur
, 0, 0);
729 iMem
= pParse
->nMem
+1;
730 assert( sqlite3SchemaMutexHeld(db
, iDb
, 0) );
731 for(k
=sqliteHashFirst(&pSchema
->tblHash
); k
; k
=sqliteHashNext(k
)){
732 Table
*pTab
= (Table
*)sqliteHashData(k
);
733 analyzeOneTable(pParse
, pTab
, 0, iStatCur
, iMem
);
735 loadAnalysis(pParse
, iDb
);
739 ** Generate code that will do an analysis of a single table in
740 ** a database. If pOnlyIdx is not NULL then it is a single index
741 ** in pTab that should be analyzed.
743 static void analyzeTable(Parse
*pParse
, Table
*pTab
, Index
*pOnlyIdx
){
748 assert( sqlite3BtreeHoldsAllMutexes(pParse
->db
) );
749 iDb
= sqlite3SchemaToIndex(pParse
->db
, pTab
->pSchema
);
750 sqlite3BeginWriteOperation(pParse
, 0, iDb
);
751 iStatCur
= pParse
->nTab
;
754 openStatTable(pParse
, iDb
, iStatCur
, pOnlyIdx
->zName
, "idx");
756 openStatTable(pParse
, iDb
, iStatCur
, pTab
->zName
, "tbl");
758 analyzeOneTable(pParse
, pTab
, pOnlyIdx
, iStatCur
, pParse
->nMem
+1);
759 loadAnalysis(pParse
, iDb
);
763 ** Generate code for the ANALYZE command. The parser calls this routine
764 ** when it recognizes an ANALYZE command.
767 ** ANALYZE <database> -- 2
768 ** ANALYZE ?<database>.?<tablename> -- 3
770 ** Form 1 causes all indices in all attached databases to be analyzed.
771 ** Form 2 analyzes all indices the single database named.
772 ** Form 3 analyzes all indices associated with the named table.
774 void sqlite3Analyze(Parse
*pParse
, Token
*pName1
, Token
*pName2
){
775 sqlite3
*db
= pParse
->db
;
783 /* Read the database schema. If an error occurs, leave an error message
784 ** and code in pParse and return NULL. */
785 assert( sqlite3BtreeHoldsAllMutexes(pParse
->db
) );
786 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ){
790 assert( pName2
!=0 || pName1
==0 );
792 /* Form 1: Analyze everything */
793 for(i
=0; i
<db
->nDb
; i
++){
794 if( i
==1 ) continue; /* Do not analyze the TEMP database */
795 analyzeDatabase(pParse
, i
);
797 }else if( pName2
->n
==0 ){
798 /* Form 2: Analyze the database or table named */
799 iDb
= sqlite3FindDb(db
, pName1
);
801 analyzeDatabase(pParse
, iDb
);
803 z
= sqlite3NameFromToken(db
, pName1
);
805 if( (pIdx
= sqlite3FindIndex(db
, z
, 0))!=0 ){
806 analyzeTable(pParse
, pIdx
->pTable
, pIdx
);
807 }else if( (pTab
= sqlite3LocateTable(pParse
, 0, z
, 0))!=0 ){
808 analyzeTable(pParse
, pTab
, 0);
810 sqlite3DbFree(db
, z
);
814 /* Form 3: Analyze the fully qualified table name */
815 iDb
= sqlite3TwoPartName(pParse
, pName1
, pName2
, &pTableName
);
817 zDb
= db
->aDb
[iDb
].zName
;
818 z
= sqlite3NameFromToken(db
, pTableName
);
820 if( (pIdx
= sqlite3FindIndex(db
, z
, zDb
))!=0 ){
821 analyzeTable(pParse
, pIdx
->pTable
, pIdx
);
822 }else if( (pTab
= sqlite3LocateTable(pParse
, 0, z
, zDb
))!=0 ){
823 analyzeTable(pParse
, pTab
, 0);
825 sqlite3DbFree(db
, z
);
832 ** Used to pass information from the analyzer reader through to the
835 typedef struct analysisInfo analysisInfo
;
836 struct analysisInfo
{
838 const char *zDatabase
;
842 ** This callback is invoked once for each index when reading the
843 ** sqlite_stat1 table.
845 ** argv[0] = name of the table
846 ** argv[1] = name of the index (might be NULL)
847 ** argv[2] = results of analysis - on integer for each column
849 ** Entries for which argv[1]==NULL simply record the number of rows in
852 static int analysisLoader(void *pData
, int argc
, char **argv
, char **NotUsed
){
853 analysisInfo
*pInfo
= (analysisInfo
*)pData
;
861 UNUSED_PARAMETER2(NotUsed
, argc
);
863 if( argv
==0 || argv
[0]==0 || argv
[2]==0 ){
866 pTable
= sqlite3FindTable(pInfo
->db
, argv
[0], pInfo
->zDatabase
);
871 pIndex
= sqlite3FindIndex(pInfo
->db
, argv
[1], pInfo
->zDatabase
);
875 n
= pIndex
? pIndex
->nColumn
: 0;
877 for(i
=0; *z
&& i
<=n
; i
++){
879 while( (c
=z
[0])>='0' && c
<='9' ){
883 if( i
==0 ) pTable
->nRowEst
= v
;
884 if( pIndex
==0 ) break;
885 pIndex
->aiRowEst
[i
] = v
;
887 if( memcmp(z
, "unordered", 10)==0 ){
888 pIndex
->bUnordered
= 1;
896 ** If the Index.aSample variable is not NULL, delete the aSample[] array
899 void sqlite3DeleteIndexSamples(sqlite3
*db
, Index
*pIdx
){
900 #ifdef SQLITE_ENABLE_STAT3
903 for(j
=0; j
<pIdx
->nSample
; j
++){
904 IndexSample
*p
= &pIdx
->aSample
[j
];
905 if( p
->eType
==SQLITE_TEXT
|| p
->eType
==SQLITE_BLOB
){
906 sqlite3DbFree(db
, p
->u
.z
);
909 sqlite3DbFree(db
, pIdx
->aSample
);
911 if( db
&& db
->pnBytesFreed
==0 ){
916 UNUSED_PARAMETER(db
);
917 UNUSED_PARAMETER(pIdx
);
921 #ifdef SQLITE_ENABLE_STAT3
923 ** Load content from the sqlite_stat3 table into the Index.aSample[]
924 ** arrays of all indices.
926 static int loadStat3(sqlite3
*db
, const char *zDb
){
927 int rc
; /* Result codes from subroutines */
928 sqlite3_stmt
*pStmt
= 0; /* An SQL statement being run */
929 char *zSql
; /* Text of the SQL statement */
930 Index
*pPrevIdx
= 0; /* Previous index in the loop */
931 int idx
= 0; /* slot in pIdx->aSample[] for next sample */
932 int eType
; /* Datatype of a sample */
933 IndexSample
*pSample
; /* A slot in pIdx->aSample[] */
935 assert( db
->lookaside
.bEnabled
==0 );
936 if( !sqlite3FindTable(db
, "sqlite_stat3", zDb
) ){
940 zSql
= sqlite3MPrintf(db
,
941 "SELECT idx,count(*) FROM %Q.sqlite_stat3"
942 " GROUP BY idx", zDb
);
946 rc
= sqlite3_prepare(db
, zSql
, -1, &pStmt
, 0);
947 sqlite3DbFree(db
, zSql
);
950 while( sqlite3_step(pStmt
)==SQLITE_ROW
){
951 char *zIndex
; /* Index name */
952 Index
*pIdx
; /* Pointer to the index object */
953 int nSample
; /* Number of samples */
955 zIndex
= (char *)sqlite3_column_text(pStmt
, 0);
956 if( zIndex
==0 ) continue;
957 nSample
= sqlite3_column_int(pStmt
, 1);
958 pIdx
= sqlite3FindIndex(db
, zIndex
, zDb
);
959 if( pIdx
==0 ) continue;
960 assert( pIdx
->nSample
==0 );
961 pIdx
->nSample
= nSample
;
962 pIdx
->aSample
= sqlite3DbMallocZero(db
, nSample
*sizeof(IndexSample
));
963 pIdx
->avgEq
= pIdx
->aiRowEst
[1];
964 if( pIdx
->aSample
==0 ){
965 db
->mallocFailed
= 1;
966 sqlite3_finalize(pStmt
);
970 rc
= sqlite3_finalize(pStmt
);
973 zSql
= sqlite3MPrintf(db
,
974 "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat3", zDb
);
978 rc
= sqlite3_prepare(db
, zSql
, -1, &pStmt
, 0);
979 sqlite3DbFree(db
, zSql
);
982 while( sqlite3_step(pStmt
)==SQLITE_ROW
){
983 char *zIndex
; /* Index name */
984 Index
*pIdx
; /* Pointer to the index object */
985 int i
; /* Loop counter */
986 tRowcnt sumEq
; /* Sum of the nEq values */
988 zIndex
= (char *)sqlite3_column_text(pStmt
, 0);
989 if( zIndex
==0 ) continue;
990 pIdx
= sqlite3FindIndex(db
, zIndex
, zDb
);
991 if( pIdx
==0 ) continue;
992 if( pIdx
==pPrevIdx
){
998 assert( idx
<pIdx
->nSample
);
999 pSample
= &pIdx
->aSample
[idx
];
1000 pSample
->nEq
= (tRowcnt
)sqlite3_column_int64(pStmt
, 1);
1001 pSample
->nLt
= (tRowcnt
)sqlite3_column_int64(pStmt
, 2);
1002 pSample
->nDLt
= (tRowcnt
)sqlite3_column_int64(pStmt
, 3);
1003 if( idx
==pIdx
->nSample
-1 ){
1004 if( pSample
->nDLt
>0 ){
1005 for(i
=0, sumEq
=0; i
<=idx
-1; i
++) sumEq
+= pIdx
->aSample
[i
].nEq
;
1006 pIdx
->avgEq
= (pSample
->nLt
- sumEq
)/pSample
->nDLt
;
1008 if( pIdx
->avgEq
<=0 ) pIdx
->avgEq
= 1;
1010 eType
= sqlite3_column_type(pStmt
, 4);
1011 pSample
->eType
= (u8
)eType
;
1013 case SQLITE_INTEGER
: {
1014 pSample
->u
.i
= sqlite3_column_int64(pStmt
, 4);
1017 case SQLITE_FLOAT
: {
1018 pSample
->u
.r
= sqlite3_column_double(pStmt
, 4);
1024 default: assert( eType
==SQLITE_TEXT
|| eType
==SQLITE_BLOB
); {
1025 const char *z
= (const char *)(
1026 (eType
==SQLITE_BLOB
) ?
1027 sqlite3_column_blob(pStmt
, 4):
1028 sqlite3_column_text(pStmt
, 4)
1030 int n
= z
? sqlite3_column_bytes(pStmt
, 4) : 0;
1035 pSample
->u
.z
= sqlite3DbMallocRaw(db
, n
);
1036 if( pSample
->u
.z
==0 ){
1037 db
->mallocFailed
= 1;
1038 sqlite3_finalize(pStmt
);
1039 return SQLITE_NOMEM
;
1041 memcpy(pSample
->u
.z
, z
, n
);
1046 return sqlite3_finalize(pStmt
);
1048 #endif /* SQLITE_ENABLE_STAT3 */
1051 ** Load the content of the sqlite_stat1 and sqlite_stat3 tables. The
1052 ** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
1053 ** arrays. The contents of sqlite_stat3 are used to populate the
1054 ** Index.aSample[] arrays.
1056 ** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
1057 ** is returned. In this case, even if SQLITE_ENABLE_STAT3 was defined
1058 ** during compilation and the sqlite_stat3 table is present, no data is
1061 ** If SQLITE_ENABLE_STAT3 was defined during compilation and the
1062 ** sqlite_stat3 table is not present in the database, SQLITE_ERROR is
1063 ** returned. However, in this case, data is read from the sqlite_stat1
1064 ** table (if it is present) before returning.
1066 ** If an OOM error occurs, this function always sets db->mallocFailed.
1067 ** This means if the caller does not care about other errors, the return
1068 ** code may be ignored.
1070 int sqlite3AnalysisLoad(sqlite3
*db
, int iDb
){
1076 assert( iDb
>=0 && iDb
<db
->nDb
);
1077 assert( db
->aDb
[iDb
].pBt
!=0 );
1079 /* Clear any prior statistics */
1080 assert( sqlite3SchemaMutexHeld(db
, iDb
, 0) );
1081 for(i
=sqliteHashFirst(&db
->aDb
[iDb
].pSchema
->idxHash
);i
;i
=sqliteHashNext(i
)){
1082 Index
*pIdx
= sqliteHashData(i
);
1083 sqlite3DefaultRowEst(pIdx
);
1084 #ifdef SQLITE_ENABLE_STAT3
1085 sqlite3DeleteIndexSamples(db
, pIdx
);
1090 /* Check to make sure the sqlite_stat1 table exists */
1092 sInfo
.zDatabase
= db
->aDb
[iDb
].zName
;
1093 if( sqlite3FindTable(db
, "sqlite_stat1", sInfo
.zDatabase
)==0 ){
1094 return SQLITE_ERROR
;
1097 /* Load new statistics out of the sqlite_stat1 table */
1098 zSql
= sqlite3MPrintf(db
,
1099 "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo
.zDatabase
);
1103 rc
= sqlite3_exec(db
, zSql
, analysisLoader
, &sInfo
, 0);
1104 sqlite3DbFree(db
, zSql
);
1108 /* Load the statistics from the sqlite_stat3 table. */
1109 #ifdef SQLITE_ENABLE_STAT3
1110 if( rc
==SQLITE_OK
){
1111 int lookasideEnabled
= db
->lookaside
.bEnabled
;
1112 db
->lookaside
.bEnabled
= 0;
1113 rc
= loadStat3(db
, sInfo
.zDatabase
);
1114 db
->lookaside
.bEnabled
= lookasideEnabled
;
1118 if( rc
==SQLITE_NOMEM
){
1119 db
->mallocFailed
= 1;
1125 #endif /* SQLITE_OMIT_ANALYZE */