2016-07-05 22 views
0

我想在postgresql表中表示0-23中的數字,並對它們進行索引。如何在postgresql中表示小數字?

這種類型的數據的最佳數據類型是什麼?

postgres=smallint 
java=short 

或者我能做得更好嗎? postgres中還有一個TINYINT數據類型,但是如何在java中表示例如「23」呢?

+1

Java對於-128到127之間的數字具有「字節」。但除此之外,爲什麼要麻煩?你在嚴重的內存限制下運行嗎? – Thomas

+0

是的,我正在運行大量的內存,大約500萬行。 – membersound

+2

如果您有5億行,那麼24值的常規索引不太可能有幫助。您可能會看到聚集索引的一些增益,但會降低插入速度。 –

回答

1

您可以使用PostgreSQL中"char"類型(注意雙引號,它們是重要的),這將只佔用一個字節,在Java中使用byte

CREATE TABLE chartest (
    id integer primary key, 
    c "char"); 

INSERT INTO chartest (id, c) VALUES (1, 42::"char"); 

你必須投的表達integer當你查詢的值,這樣就可以使用getByte(int)方法:

java.sql.Statement st = conn.createStatement(); 
java.sql.ResultSet rs = st.executeQuery("SELECT c::integer FROM chartest WHERE id = 1"); 
rs.next(); 
System.out.println(rs.getByte(1)); 

注:屬性總是對準根據typalign屬性的數據類型。
例如,如果在上面的示例的列c之後立即添加一個類型爲integer的新列,則會有三個字節在這些列之間浪費併爲空。
所以如果你想節省空間,你必須小心物理佈局。

您可能以這種方式在數據庫上節省了一些空間,但我不知道是否值得付出努力。如果我是你,我會試着去看看它是否值得。

相關問題