Newsgroup: it.comp.lang.delphi
Titolo: Indici tabelle db4

Ciao a tutti
A cosa servono gli indici di una tabella????
Sto lavorando su tabelle db4 (che schifo!!!!) e le normali query mi fanno
casino a livello di indici e quindi non posso usarle come di solito faccio
in db2.
Delphi 5 mette a disposizione codebase, una unit con funzioni sostitutive
dell' SQL per db4
Nonostante ciò l'accesso ai dati è molto lento.
Vorrei passare a tali funzioni un riferimento all'indice delle tabelle ma
non so bene di cosa si tratta (non so a cosa serve definire un indice in una
tabella):
Chi mi aiuta??????????
Grazie
Andrea

 Chi mi aiuta??????????
Al solito.
L'unica cosa che dici è che hai problemi di prestazioni.
Dici di avere dei casini sugli indici, ma non descrivi "quali"
sono i casini.
Cerca di mettere ordine nei tuoi pensieri e posta un msg
MIRATO relativo al tuo problema specifico.
Bye
AS
"Se è Microsoft non funziona"
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 A cosa servono gli indici di una tabella????
Gli indici servono a tener traccia di come sono organizzati i
dati, perche' siano piu' facilmente reperibili nelle ricerche.
Delphi 5 supporta l'accesso al formato .DBF, cosi' come la
costituzione degli indici per queste tabelle.
Gli indici possono essere a chiave primaria (indice unico) o 
a chiave secondaria (uno o piu' indici).
Se non ricordo male, DB4 costruiva un file .NTX per l'indice
primario e un file .MDX per tutti gli indici secondari.
La chiave primaria serve ad identificare univocamente il
record nella tabella e puo' essere composta da uno o piu'
campi (in un ipotetica tabella "clienti.dbf", il campo
"codicecliente" assurge a diventare la chiave primaria).
La chiave secondaria e' generalmente formata da un campo
solo e serve a creare una sequenza ordinata per i valori 
di quel campo, in modo da rendere possibili eventuali 
ricerche in tempi brevissimi (nella abella "clienti.dbf", 
il campo "ragionesociale" puo' essere una chiave secondaria).
Non so che genere di problemi tu abbia con le query, ma ti
conviene, comunque, costruire degli indici per le tue tabelle.


 Bye
Hai ragione, un pò di confusione la ho.......
Grazie mille comunque per il tempo dedicatomi.
Ciao  Andrea


 ha scritto nel messaggio
news:3d7a8567c66643ff669...@mygate.mailgate.org...

Il problema delle query in db4 è che una ricerca "semplice" dura mezz'ora.
Con funzioni Codebase che intervengono sugli indice è molto meglio(mi è
stato spiegato).
Il problema è che il concetto di indice mi era ostico, ora un pò meno.
Grazie mille
Andrea


Il problema delle query in db4 è che una ricerca "semplice" dura mezz'ora.
Se il principio applicato a DB4 e' lo stesso che e' stato
conservato con Paradox (erede di DB4), le query NON
considerano gli indici nella loro esecuzione.
C'e' poco da fare.
Il concetto di indice non ti deve essere ostico, e' talmente
semplice.  Una tabella e' una sequenza di record inseriti
uno dopo l'altro in momenti successivi:
cane
armadio
osso
rastrello
libro
barca
Se dovessi cercare "barca" in questa sequenza ti troveresti
a compiere 6 confronti prima di ottenere il risultato.
L'indice ottimizza il numero di confronti da compiere (e
quindi l'accesso al disco e quindi la velocita' complessiva
dell'operazione) creando una struttura parallela ai dati
veri e propri.
Generalmente questa struttura e' ad albero binario e
consente di compiere una ricerca dicotomica del tipo:
armadio
barca
cane
libro
osso
rastrello
confronto la parola cercata con l'elemento di mezzo (libro):
 barca == libro ? 
    no: allora eseguo il confronto <
 barca < libro ? 
    si: allora considero la meta' superiore dei dati
 
la meta' superiore e':
armadio
barca
cane 
ripeto l'algoritmo:
confronto la parola cercata con l'elemento di mezzo (barca):
  barca == barca ? 
    si: ricerca terminata
Come vedi, i 6 confronti si sono ridotti a 2.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 a compiere 6 confronti prima di ottenere il risultato.
Comincio a farmi un'idea..
Ecco dunque perchè un ciclo while che arriva a fine tabella è +
lento....scorre tutti i record

Questo proprio non lo sapevo!!!!!!!
Grazie, mi sarà utile
Andrea


 lento....scorre tutti i record
Esatto.
