2016-10-06 78 views
0

我遇到了有關ARIA數據庫表的條目的問題。所述表的結構應是這樣的:Aria:DECIMAL條目的長度不正確

SHOW CREATE TABLE grid; 

CREATE TABLE `grid` 
(`meas_time` decimal(11,1) unsigned NOT NULL, 
`meas_id` tinyint(2) unsigned NOT NULL, 
`frequency` float(6,4) unsigned NOT NULL, 
`voltage` float(7,4) unsigned NOT NULL, 
`phase` float(9,8) unsigned NOT NULL, 
PRIMARY KEY (`meas_time`,`meas_id`)) 
ENGINE=Aria 
DEFAULT CHARSET=latin1 
PAGE_CHECKSUM=1 

插入到該表中的數據有總是應該正好滿足上述結構相同的格式。不過,這似乎只是爲「MEAS_ID」,「頻率」,「電壓」和「階段的工作 - 而不是「meas_time」:

SELECT FROM grid PROCEDURE ANALYSE(); 

第一(左)回答表的一半:

Field_name    Min_value  Max_value  Min_length Max_length 
archiv.grid.meas_time 1473152369.8 1475751654.0 22   22   
archiv.grid.meas_id  1    1    1   1 
archiv.grid.frequency 49.5832   59.9998   7   7 
archiv.grid.voltage  101.3357  812.5874  8   8 
archiv.grid.phase  0.00043659  6.99986124  10   10  

二(右)回答表的一半:

Empties_or_zeros Nulls Avg_value_or_avg_length Std   Optimal_fieldtype 
0     0  1474509648.88213   845302.17909 DECIMAL(21, 1) NOT NULL 
0     0  1.0000     0.0000  ENUM('1') NOT NULL 
0     0  50.0250     0.3668  FLOAT(6,4) NOT NULL 
0     0  289.5351     40.3620  FLOAT(7,4) NOT NULL 
0     0  3.15090137    1.80843320 FLOAT(9,8) NOT NULL 

所有數據被插入以同樣的方式 - 由python腳本利用的MySQLdb的包。它特別插入到數據庫中,如合適的長度,刺:

command = "INSERT INTO grid VALUES ('" + str(timestamp)[:12] + \ 
      "', '" + str(frequency)[:7] + "', '" + str(voltage)[:8] + \ 
      "', '" + str(phase)[:10] + "');" 
self.localCursor.execute(command) 
self.localDB.commit() 

我跑的數據庫管理系統是這樣的:

Server Version: 5.5.52-MariaDB-1ubuntu0.14.04.1 - (Ubuntu) 

顯然,這種差異是一個問題,因爲它會不必要膨脹了我的數據庫的大小。有誰知道,爲什麼會發生這種情況,我怎麼能阻止它?

回答

0

用於存儲小數列的內部格式發生了變化(MySQL 5.0或5.1中的afaik),並且過程analyze()中的更改未更新。所以只需忽略這些值。

如果您的where條件使用maes_id,則應該定義考慮更改主鍵中的鍵順序以避免索引掃描。

+0

好吧..但'行長'和'行大小'的值是準確的還是他們有同樣的問題?關於複合主鍵:當第一個鍵被首先使用時,鍵的順序會影響查詢的速度?在那種情況下,我應該改變這些。謝謝。 – Fantilein1990

0

不是使用FLOAT(m,n);它會導致雙重循環和潛在的數據損壞。要麼使用簡單的FLOAT(科學數量像那些)或DECIMAL(m,n)(錢)。

PROCEDURE ANALYSE已棄用。當然它有一些用處,但那太糟糕了。

ANALYSE可能會在DOUBLE中做所有事情。無論如何,你想要這些三個整數的平均值:1211.3333333是明顯的答案,但誰控制小數位數?將原始數據類型舍入並得到1是不是「錯誤」?

+0

謝謝你的進一步的建議( - >雙舍入),但我沒有得到你最後一段的意思..是關於再次四捨五入的嗎?還是瞄準別的東西? – Fantilein1990

+0

不是針對雙向四捨五入,而是針對平均要輸入多少個小數位 - 與問題的標題相關。 –

+0

呵呵,在這種情況下,小數位數是根據基本測量系統的準確度來選擇的。測量系統提供數據,數據庫存儲數據。但我同意你的看法,通常這將是一個艱難的呼籲。 – Fantilein1990