Python sqlite3 не использует индекс с LIKE

У меня есть таблица с одним столбцом, который я запрашиваю двумя способами:

SELECT * FROM sequences WHERE seqs="blablabla"SELECT * FROM sequences WHERE seqs LIKE "blablabla%"

Для этих запросов, чтобы использовать индекс, мне нужны два индекса (по одному для каждого типа запроса):

CREATE INDEX test_nocol ON sequences(seqs) для первого запроса.CREATE INDEX seqs_index ON sequences(seqs COLLATE NOCASE) для второго запроса.

Это все хорошо, но затем я добавляю модуль sqlite3 в python3 и вместо этого начинаю выполнять запросы, которые работают с необработанными строками, но когда я использую привязки параметров,COLLATE Индекс внезапно больше не используется:

>>> sql = 'explain query plan\n select seqs from sequences where seqs="blabla"'
>>> c3.execute(sql).fetchall()
[(0, 0, 0, 'SEARCH TABLE sequences USING COVERING INDEX test_nocol (seqs=?)')]
>>> sql = 'explain query plan\n select seqs from sequences where seqs=?'
>>> c3.execute(sql, ('hahahah',)).fetchall()
[(0, 0, 0, 'SEARCH TABLE sequences USING COVERING INDEX test_nocol (seqs=?)')]
>>> sql = 'explain query plan\n select seqs from sequences where seqs like "hahahah%"'
>>> c3.execute(sql).fetchall()
[(0, 0, 0, 'SEARCH TABLE sequences USING COVERING INDEX seqs_index (seqs>? AND seqs<?)')]
>>> sql = 'explain query plan\n select seqs from sequences where seqs like ?'
>>> c3.execute(sql, ('hahahah',)).fetchall()
[(0, 0, 0, 'SCAN TABLE sequences')]

Что я здесь не так делаю? Поскольку это серверная часть сериализации, а не БД веб-приложения, я думаю, угроза при использовании необработанных строк менее серьезна, но я бы предпочел использовать правильное форматирование SQL.

Ответы на вопрос(1)

Ваш ответ на вопрос