Sto scrivendo una funzione in ColdFusion che restituisce il primo paio di record che corrispondono all'ingresso dell'utente, nonché il conteggio totale dei record corrispondenti nell'intero database. La funzione verrà utilizzata per alimentare un completamento automatico, quindi la velocità/efficienza sono le sue preoccupazioni principali. Ad esempio, se la funzione riceve input "bl"
, potrebbe tornare {sampleMatches:["blue", "blade", "blunt"], totalMatches:5000}
trovare sottoinsieme di record in modo efficiente e conteggio totale
Ho tentato di fare questo in una singola query a fini di velocità, e finito con qualcosa che si presentava così:
select record, count(*) over()
from table
where criteria like :criteria
and rownum <= :desiredCount
Il problema con questa soluzione è che count(*) over()
restituisce sempre il valore di :desiredCount
. Ho visto una domanda simile alla mia here, ma la mia app non ha i permessi per creare una tabella temporanea. Quindi c'è un modo per risolvere il mio problema in una query? C'è un modo migliore per risolverlo? Grazie!
i tuoi "criteri" saranno limitati a una serie di criteri per i quali sai che puoi utilizzare un indice? Se l'utente può impostare qualsiasi criterio pazzo, eseguirai un sacco di scansioni complete – tbone
Per curiosità, se la funzione deve essere utilizzata per il completamento automatico, qual è lo scopo del conteggio? –
@tbone la colonna criteri è già indicizzata – Josh