270 messaggi dal 14 novembre 2001
Ciao a tutti, in SQL Server ho una colonna che al momento è di tipo Real (4 bytes). Il valore massimo memorizzato è xxx,xxx (quindi per esempio ci può essere 5,15 oppure 197,755)

Secondo voi è il caso di trasformarlo in un Decimal (6, 3), che occuperebbe 5 bytes ?

Ho fatto su una tabella di prova delle query per valutarne le performance, per esempio Select SUM(NomeColonna) AS prova FROM ... ma non riesco a capire se effettivamente ho dei vantaggi o no.

Mi sapreste consigliare ?

Campo Testaccio, c'hai tanta gloria...
113 messaggi dal 09 febbraio 2017
Sicuramente dipende dal utilizzo é dalla quantitá di dati in questione, senza queste informazioni non credo sia possibile fare un confronto

Emanuel Pirovano
Web Developer
270 messaggi dal 14 novembre 2001
Ema96Arpa ha scritto:
Sicuramente dipende dal utilizzo é dalla quantitá di dati in questione, senza queste informazioni non credo sia possibile fare un confronto


Grazie:)
Non è una tabella molto grande, ha 5 colonne in tutto e poco meno di un milione di record.

[ID_CodiceMagazzino] INT
[DataFlusso] INT
[ID_CodiceProdotto] INT
[CodiceProdottoAM] INT
[Rimanenza] REAL

Le colonne sono 4 Integer (che rappresentano anche la PrimaryKey) e 1 Real (appunto quella in questione). Pesa circa 25 MB.


Non ho problemi di prestazione, mi interessava sapere il vs. punto di vista perché al tempo stesso ho un'altra tabella, molto simile a questa come struttura, ma molto molto più grande come numero di record e che rappresenta una delle tabelle più importanti. Lì anziché Real ho usato Decimal (6, 3)

Le query principali contengono essenzialmente la funzione SUM() sulla colonna Real (gli altri campi possono essere presenti nella clausola WHERE e/o GROUP BY.

Campo Testaccio, c'hai tanta gloria...
113 messaggi dal 09 febbraio 2017
Pensavo vi erano problemi di spazio o prestazione.
Dunque la differenza principale tra decimal / real sta nel approssimazione.

Ti cito da documentazione :

The decimal data type can store a maximum of 38 digits, all of which can be to the right of the decimal point. The decimal data type stores an exact representation of the number; there is no approximation of the stored value.


The float and real data types are known as approximate data types. The behavior of float and real follows the IEEE 754 specification on approximate numeric data types.

Emanuel Pirovano
Web Developer
270 messaggi dal 14 novembre 2001
Io pensavo che per il mio caso fosse più adatto Decimal, proprio perché a me non serve l'approssimazione. Ma non so se è giusto o no :D

Campo Testaccio, c'hai tanta gloria...
113 messaggi dal 09 febbraio 2017
Sul valore esatto vai sul sicuro , anche secondo me meglio Decimal.

Vediamo se qualcun altro passa a dare un opinione

Emanuel Pirovano
Web Developer
270 messaggi dal 14 novembre 2001
Ema96Arpa ha scritto:
Sul valore esatto vai sul sicuro , anche secondo me meglio Decimal.

Vediamo se qualcun altro passa a dare un opinione


Per il momento grazie tantissimo. Spero che è giusto Decimal perché vorrebbe dire che non devo toccare la tabella principale ma solo quella secondaria :)

Dalle prove che ho fatto con qualche query non vedo differenze di performance, ma è appunto abbastanza leggera come tabella...

Campo Testaccio, c'hai tanta gloria...
salve,
personalmente, se non necessario, io sto sempre molto lontano dai tipi approssimati real e float... proprio perche' sono approssimati...
potresti quindi trovarti nella situazione dove
SELECT * FROM dbo.tabella WHERE realCol = x.y;
ti ritorni risultati inconcludenti/indesiderati... non dico errati in quanto essendo il tipo di dato approssimato, ovviamente una comparazione in tal senso tra valori approssimati non sempre risulta soddisfare le tue richieste... in questi termini e' meglio definire un intorno di ricerca, tipicamente qualche cosa simile a
WHERE ABS(realCol - x.y) < 0.001
dove l'approssimazione viene ulteriormente giocata su un intorno di errore plausibile/possibile, al fine di comprendere nel risultato il maggior numero di falsi positivi alla negazione di comparazione, anche se ovviamente si rischiano dei veri positivi alla negazione di comparazione...
per il mio pensiero e' effettivamente un tipo di dato "da non usare" se non in casi specifici...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.