create table FOO(A INT, B INT, C INT); create table GOO(C INT PRIMARY KEY, D INT);
SELECT * FROM sqlite_stat1; No such table
ANALYZE FOO; Nothing
insert into FOO(A, B, C) values (10,11,12); ANALYZE FOO; Nothing SELECT * FROM sqlite_stat1; FOO||1
insert into FOO(A, B, C) values (20,21,22); ANALYZE FOO; Nothing SELECT * FROM sqlite_stat1; FOO||2 insert into FOO(A, B, C) values (30,31,32); ANALYZE FOO; Nothing SELECT * FROM sqlite_stat1; FOO||3 insert into GOO(C, D) values (1, 2); sqlite>ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|1 1 sqlite> insert into GOO(C, D) values (2, 4); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|2 1
insert into GOO(C, D) values (3, 4); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|3 1 sqlite> create index D_index on GOO(D); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|D_index|3 2 GOO|sqlite_autoindex_GOO_1|3 1(Edited: 2020-03-18)
Microsoft Windows [Version 10.0.18362.720] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\djgon>sqlite3 foo.db SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. sqlite> CREATE TABLE FOO(A INT, B INT, C INT); sqlite> CREATE TABLE GOO(C INT PRIMARY KEY, D INT); sqlite> SELECT * FROM sqlite_stat1; Error: no such table: sqlite_stat1 sqlite> ANALYZE FOO; sqlite> ANALYZE GOO; sqlite> INSERT INTO FOO VALUES (0,0,0); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||1 sqlite> INSERT INTO FOO VALUES (1,1,1); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||2 sqlite> INSERT INTO FOO VALUES (2,2,2); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 sqlite> INSERT INTO GOO VALUES (0,0); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|1 1 sqlite> INSERT INTO GOO VALUES (1,1); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|2 1 sqlite> INSERT INTO GOO VALUES (2,1); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|3 1 sqlite> CREATE INDEX index_d ON GOO(D); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|index_d|3 2 GOO|sqlite_autoindex_GOO_1|3 1
$ sqlite3 foo.db SQLite version 3.28.0 2019-04-15 14:49:49 Enter ".help" for usage hints. sqlite> create table FOO(A INT, B INT, C INT); sqlite> create table GOO(C INT PRIMARY KEY, D INT); sqlite> SELECT * FROM sqlite_stat1; Error: no such table: sqlite_stat1 sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; sqlite> insert into foo(A,B,C) values (6,0,0); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||1 sqlite> insert into foo(A,B,C) values (5,1,1); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||2 sqlite> insert into foo(A,B,C) values (4,2,2); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 sqlite> insert into goo(C,D) values (0,9); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|1 1 sqlite> insert into goo(C,D) values (4,5); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|2 1 sqlite> insert into goo(C,D) values (8,1); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|3 1 sqlite> insert into goo(C,D) values (2,1); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|4 1 sqlite> create index goo_i on goo(D); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|goo_i|4 2 GOO|sqlite_autoindex_GOO_1|4 1 sqlite>The second value in the stat column of sqlite_stat1 keeps track of the number of rows within a table. The additional fields in the stat column of sqlite_stat1 are for the average number of rows with the same index as their value.(Edited: 2020-03-18)
After run ANALYZE FOO, then SELECT * FROM sqlite_stat1, nothing returns After run ANALYZE GOO, then SELECT * FROM sqlite_stat1, nothing returns.
sqlite> CREATE TABLE FOO(A INT, B INT, C INT); sqlite> CREATE TABLE GOO(C INT PRIMARY KEY, D INT); sqlite> SELECT * FROM sqlite_stat1; sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; sqlite> INSERT INTO FOO(A,B,C) ...> VALUES (1,2,3), (4,5,6), (7,8,9); sqlite> ANALYZE FOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 sqlite> INSERT INTO GOO(C,D) ...> VALUES (10, 11), (12, 11), (13, 14); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|sqlite_autoindex_GOO_1|3 1 sqlite> CREATE INDEX ind ON GOO(D); sqlite> ANALYZE GOO; sqlite> SELECT * FROM sqlite_stat1; FOO||3 GOO|ind|3 2 GOO|sqlite_autoindex_GOO_1|3 1
The second value is an estimate of the number of rows with the same value in the indexed column. The additional values are the estimates of the number of rows with the same value in the other indexed columns.