Newsgroup: it.comp.software.database
Titolo: lentezza tabella con campo long

Ho un problema di lentezza su una tabella, contenente un campo long di
dimensioni considerevoli.
Un semplice "select count(*) from tabella" mi movimenta qualcosa cone
400mb di dati"...
che soluzioni ci sono per velocizzare le query che non coinvolgono il
campo long?
Avevo pensato di creare un indice o una materialized view che
coinvolgano tutti i campi escluso il long, o in maniera piu' radicale
trasformare la tabella in un cluster(?), mettendo da una parte il
campo long e dall'altra il resto. Non posso cambiarlo in blob.
Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com

 campo long?
Non usare * e' il primo passo. Per esempio select count(ID) from tabella,
dove ID e' la PK della tabella stessa.
Davide

 ha
scritto nel messaggio
news:cf9e644b.020...@posting.google
.com...

Che database stai usando?
Oracle p SQLServer?

 campo long e dall'altra il resto. Non posso cambiarlo in blob.
no i cluster sono roba per paranoici... e con le viste peggiori solo
la situazione.
hai una primary key sulla tabella... ovvio(?) o comunque un indice
selettivo
comunque in sequenza queste due operazioni
a) analyze table myTable compute statistics (puoi fare anche
un'estimate
se la tabella è enorme ma come tu hai detto 400 mega... sono pochi)
b) Select /*+ index(myTable) */ count(*) from myTable
ovvio che devi sostituire myTable con la tua tabella
il passo (a) non è strettamente necessario, ma corrobora i polmoni
e ripristina la flora batterica intestinale del db...
facci sapere
/G

...
Il 90% delle query che faccio sono per controllare dei parametri come
nome del file, dimensione e data che sono su altri campi della
tabella, ma e' lenta anche su queste query.
Quello che vorrei fare e' fare in modo che Oracle non vada a vedere
nella tabella, ma si limiti a trovarsi questi campi in opportuni
indici o materialized view. oppure se proprio deve andarci fargli
avere fisicamente una tabella senza long, utilizzando un cluster.
Oltretutto siccome vengono fatti frequenti update del campo long nella
tabella, questa si trova in condizioni penose tra
migrazioni/frammentazioni e altro, e non riesco a deframmentarla
creando una tabella di appoggio perche':
SQL> create table prova as
  2  select * from td_planimetrie;
select * from td_planimetrie
       *
ERROR at line 2:
ORA-00997: illegal use of LONG datatype
(poi credo che comunque sarebbe troppo grande e non avrei spazio su
disco)
Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com


 ha
scritto nel messaggio
news:cf9e644b.020...@posting.google
.com...

Supponendo che tu stia utilizzando Oracle,
devi considerare alcune cose:
Per effettuare una count il metodo che hai
utilizzato tu č il piů lento
sono piů veloci nell'ordine
select count(rowid) from tabella
select count(1) from tabella        (dove 1 č
un campo non null)
Inoltre i campi long sono causa di
frammentazioni della tabella,
č consigliabile controllare la tabella
periodicamente ed effettuare
una riorganizzazione della tabella (magari
anche cancellazione e
ricreazione).
Il fatto che un count ci metta molto dipende
anche dal fatto che
High-water-mark č elevato.
Quando effettui una select(*) effettui una
full table scan, questo
fa si che Oracle si fermi nella lettura della
tabella solo quando
trova l'High-water-mark e non quando finisce
effettivamente
di leggere le righe.
                                    danilo

 disco)
posti i risultati dell'analyze?
/G

 SQL> set long 1000
SQL> create table ale_forever (
  2  x long
  3  );
Table created.
SQL> create table forza_ale as
  2  select * from ale_forever;
select * from ale_forever
       *
ERROR at line 2:
ORA-00997: illegal use of LONG datatype
SQL> set long 1000;
SQL> r
  1  create table forza_ale as
  2* select * from ale_forever
select * from ale_forever
       *
ERROR at line 2:
ORA-00997: illegal use of LONG datatype
E questo e' il motivo per cui non riesco facilmente a deframmentare la tabella.


 E questo e' il motivo per cui non riesco facilmente a deframmentare
la tabella.
Scusa ma che versione usi?
io la 8.1.7 e tutti questi problemi non ne ho manco di striscio, ma
non ne avevo
anche utilizzando versioni precedenti... i campi long li ho incontrati
dalla 7.1 fino
alla 8.0 compresa..
Cmq puoi tagliare la testa al toro:
a) fai un BU del db
b) controlli i parametri di storage della tabella
c) ti esporti la tabella che ti interessa
d) droppi la tab
e) la ricrei eventualmente con i parametri di storage modificati
f) reimporti la tab