Newsgroup: it.comp.lang.delphi
Titolo: Paradox, Query e Indici secondari

Dopo essermi imbarcato in un lungo thread sul fatto che *in paradox*
gli indici secondari fossero utili o meno utilizzando TQuery ho deciso
di tagliare la testa al toro e fare qualche test.
I test non sono stati approfonditi per mancanza di tempo, ma credo,
interessanti.
Ecco cosa ho fatto:
Ho creato una tabella con i seguenti campi:
- Account (integer)
- StartTime, EndTime(Timestamp)
- Price (Currency)
- HeaderID (Integer)
Ho creato una chiave primaria (account, starttime, endtime).
Ho popolato la tabella con 600.000 record (mi sembravano sufficienti).
Le query che ho eseguito sono state:
1) Select Count (*) as Conto from Dettagli where HeaderID = 14798 --
tempo di esecuzione 2.5 secondi
2) Update Dettagli set Price = 100 where HeaderID = 11008 -- 5 secondi
(200 record circa)
3) Delete Dettagli where HeaderID = 12901 -- 5 secondi (200 record
circa)
Non ho quindi, fatto inner join o cose strane e ho sempre utilizzato
un campo non indicizzato.
A questo punto ho aggiunto un indice secondario su HeaderID e questi
sono i risultati:
IDENTICI
Paradox e TQuery non utilizzano gli indici (almeno i secondari)
contrariamente a quanto affermavo in base alla logica SQL.
Anche oggi ho imparato una cosa nuova (relativamente inutile in quanto
Paradox non lo uso da molti anni) che spero possa essere d'aiuto ai
BDEisti.
Avrei potuto glissare ma credo che i gruppi di discussione non servano
per far vedere chi è più bravo ma per imparare dalle esperienze altrui
(amen).
Con la testa sotto i vostri piedi (e potete anche saltare) vi saluto e
torno a smadonnare con MSSQL ;-)
Massimo.
-----------
Ore 18.30: premo invio.

contrariamente a quanto affermavo in base alla logica SQL.
Piu' che altro e' il BDE poco furbo.
Ciao Uberto
-------------------------------
Message Posted by  <dedGateway>
http://www.dedonline.com/forump

 torno a smadonnare con MSSQL ;-)
Noooo... adesso devo comprarmi il libro di Barbini !!! :)
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Ho fatto anch'io una prova, con una tabella decisamente piu' semplice:
ID: integer (PK)
Data: Tdate
Nome, cognome: A20
Popolata con 500.000 record
  ch := mmCognomi.Lines.Count;        // circa 25
  nh := mmNomi.Lines.Count;           // circa 12
  BigTab.Active := True;
  for i := 100000 to 600000 do begin
    c := mmCognomi.Lines[Random(ch)];
    n := mmNomi.Lines[Random(nh)];
    d := EncodeDate(2001, 1 + random(12), 1 + random(27));
    BigTab.AppendRecord([i, d, c, n]);
  end;
Copiata col suo Px su altra tabella, creato indice secondario su Data;
la query e'
"SELECT DISTINCT ID, Data, Cognome, Nome
FROM ":BorlandSample:prova1.db" // o prova2.db
WHERE
(Cognome = 'Lapierre') AND (
(Data = '08/01/2001')
 OR (Data = '08/31/2001'))"
I record ritornati sono una sessantina
I risultati sono:
senza indici secondari > 8.2 secondi (quasi 9 al primo giro)
con indici secondari < 400 ms
Le mie 40 lire (2 cent)
Saluti
Paolo Arosio

Le mie 40 lire (2 cent)
Non so piu' che dire :)
Io sostenevo una cosa e mi sono autoprovato che sbagliavo e adesso
salta fuori una controprova.
Non proseguo nelle ricerche perché come dicevo si tratta, per quanto
mi riguarda, solo di accademia, paradox non lo uso. Certo che la cosa
si fa intrigante.
BOH.
