SQLITE и автоматическое индексирование

Недавно я начал изучать индексирование в sqlite. Я могу успешно создать индекс с моими желаемыми столбцами.

После этого я взглянул на базу данных, чтобы увидеть, что индекс был создан успешно только для того, чтобы найти, что sqlite уже создал автоматически индексы для каждой из моих таблиц: "Sqlite_autoindex_tablename_1"

Эти автоматически генерируемые индексы использовали два столбца каждой таблицы, два столбца, которые составляют мой составной первичный ключ. Это просто нормальная вещь для работы sqlite при использовании составных первичных ключей?

Так как я буду выполнять большинство моих запросов на основе этих двух столбцов, имеет ли смысл создавать индексы вручную, что то же самое?

Новые индексы, так что действительно оцените любую поддержку/отзывы/советы и т.д. - спасибо!

Ответ 1

SQLite требует индекса для принудительного ограничения PRIMARY KEY - без индекса, принудительное ограничение ограничений будет сильно замедляться по мере роста размера таблицы. Ограничения и индексы не идентичны, но я не знаю какой-либо реляционной базы данных, которая автоматически не создает индекс для принудительного использования первичных ключей. Так что да, это нормальное поведение для любой реляционной базы данных.

Если целью создания индекса является оптимизация поисков, в которых у вас есть индексный термин поиска, который включает первый столбец в индексе, тогда нет причин создавать дополнительный индекс для столбца (ов) - SQLite будет использовать автоматически созданный.

Если ваш поиск будет включать второй столбец в индексе без включения индекса для первого столбца, вам нужно будет создать свой индекс. Ни SQLite (ни какая-либо другая реляционная база данных, о которой я знаю) не могут использовать составные индексы для оптимизации фильтрации, когда главные столбцы индекса не указаны в поиске.