Python sqlite3 no usa index con LIKE

Tengo una tabla con una sola columna, que consulto de dos maneras:

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

Para que estas consultas utilicen un índice, parece que necesito dos índices (uno para cada tipo de consulta), como tales:

CREATE INDEX test_nocol ON sequences(seqs) para la primera consultaCREATE INDEX seqs_index ON sequences(seqs COLLATE NOCASE) para la segunda consulta

Eso está muy bien, pero luego agrego el módulo sqlite3 de python3 y empiezo a consultar allí, lo que funciona con cadenas sin formato, pero cuando uso enlaces de parámetros, elCOLLATE El índice ya no se utiliza de repente:

>>> 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')]

¿Qué estoy haciendo mal aquí? Dado que este es un backend de serialización y no un DB de aplicación web, supongo que la amenaza cuando se usan cadenas sin procesar es menos grave, pero preferiría usar el formato SQL adecuado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta