Dada la siguiente tabla de base de datos:¿Existe alguna forma mejor de encontrar anagramas utilizando SQL?
WORDS
alphagram....varchar(15)
word.........varchar(15) PK
length.......int
Donde:
- 'alfagrama' es las letras de una palabra en orden alfabético (por ejemplo AEINNRTT es la alfagrama de INTRANET)
- la clave primaria es 'palabra', y hay índices en alfagrama y longitud
He encontrado una forma de encontrar los anagramas de una cadena dada de letras s a través de SQL. Por ejemplo, para encontrar los anagramas de AEINNRTT esto funcionará:
select alphagram, word, definition
from words
where length = 8
and alphagram like '%A%'
and alphagram like '%E%'
and alphagram like '%I%'
and alphagram like '%NN%'
and alphagram like '%R%'
and alphagram like '%TT%'
que devolverá 1 fila (por INTRANET)
y si quería incluir un número conocido de comodines, por ejemplo, cuántos las palabras están en INTRANET + en blanco (comodín) Solo tengo que cambiar la 'longitud' por el número total de letras + número de comodines
Por ej.
select alphagram, word, definition
from words
where length = 9
and alphagram like '%A%'
and alphagram like '%E%'
and alphagram like '%I%'
and alphagram like '%NN%'
and alphagram like '%R%'
and alphagram like '%TT%'
... volverá 8 filas (entretener, instanter, integrantes, intranets, itinerante, Nattering, RATTENING y transitorio)
Mi pregunta es la siguiente: ¿hay una manera más eficiente de hacerlo a través de SQL solamente?
Esto funciona bastante rápido en SQLServer pero bastante lento en SqlLite. Me doy cuenta de que las búsquedas de% xxx% no son rápidas.
¿Hay alguna razón por la que esté utilizando SQL solo en lugar de una capa de aplicación? – JNK
Estoy tratando de mantener las cosas simples, pero es probable que tenga que hacer esa ruta. – eponymous23