Кроме того, I = (K + D-1) / D означает: K - общее число строк, а D - различные значения для каждого столбца,
так что если вы создали таблицу с CREATE TABLE TEST (C1 INT, C2 TEXT, C3 INT, C4 INT);
и вы создаете индекс, как CREATE INDEX IDX on TEST(C1, C2)
Затем вы можете вручную ВСТАВИТЬ или разрешить sqlite автоматически обновлять таблицу sqlite_stat1 следующим образом:
"TEST" -> TABLE NAME, "IDX" -> INDEX NAME, "10000 1 1000", HERE, 10000 - ваше общее количество строк в TABLE TEST, 1 означает, что для столбца C1 все значения кажутся Это похоже на то, что С1 - это что-то вроде идентификатора или чего-то подобного, 1000 означает, что С2 имеет менее отчетливое значение, как вы знаете, чем выше значение, тем менее отчетливы значения индекса, относящегося к конкретному столбцу.
Вы можете запустить ANALYZE
или обновить таблицу вручную. (Лучше сделай первый).
Так для чего используется значение? sqlite будет использовать эту статистику, чтобы найти лучший индекс, который они хотят использовать, вы можете рассмотреть CREATE INDEX IDX2 ON TEST(C2)" AND the value in stat1 table is "10000 1
и CREATE INDEX IDX1 ON TEST(C1)" with value "10000 100";
Предположим, у нас нет индекса IDX, который мы определили ранее, когда вы выпускаете
SELECT * FORM TEST WHERE C1=? AND C2=?
, sqlite выберет IDX2, но не IDX1, почему? Это просто, поскольку IDX2 может минимизировать результаты запроса, а IDX1 - нет.
Ясно?