2011-06-15 86 views
0

哪一個數據庫鍵的字符串更長或更長?如果差值是微秒,則與我們的應用無關。該表有數千個記錄/行。如果Long更快,如何將字符串轉換爲Long,是否有一些Java API,以便唯一的字符串可以轉換爲唯一的long?數據庫主鍵

+2

這是關於什麼數據庫?德比? – 2011-06-15 07:48:42

+3

Long值有限,可能的字符串數量有限,因此您要查找的字符串 - >長整型轉換無法完成。 – Buhb 2011-06-15 07:55:29

+0

@Buhb,我想'String'列只包含存儲爲'String'的數值...... – 2011-06-15 07:58:47

回答

1

哪一個更快的將數據庫關鍵字設置爲String或Long?

這很可能是一個long比String更快。首先,處理器可以處理「自然」長的類型值,而字符串必須通過軟件操作。此外,字符串可能會佔用更多的內存而不是長的值,這意味着緩存處於更大的壓力之下,更多的數據必須從/加載/保存到磁盤。

如果差值是微秒,則與我們的應用無關。該表有數千個記錄/行。

所以它取決於操作。如果你

如果長更快,如何將一個字符串轉換爲長,是否有一些Java API,以便唯一的字符串可以轉換爲唯一的長?

您可以使用它的hash code從字符串派生int。這個你從這個方法中得到的整數將在允許的範圍內很好地分佈,但不能保證是唯一的。一般來說,不可能從一個字符串中派生一個唯一的int,因爲嚴格來說,字符串比long長。

想象一下,您可以構建一個巨型表格,其中包含所有長整型值的十進制表示形式。現在有一個微不足道的長< - >兩者之間的字符串映射。但是這張表仍然不包含字符串「hello world」,並且沒有更多的剩餘空間可以用來表示這個字符串。

一般來說,我的建議是:如果您的源數據是天生 string類型,請使用它並讓數據庫執行優化。擁有「成千上萬」條目的表對於任何當前數據庫都不會成爲問題。也許你可以通過創建聰明的索引來提高性能。

2

一般來說,構建,維護和掃描索引VARCHARString)的速度應該低於BIGINTLong)索引。

要查看所不同的是爲您的使用情況下,重要的是,我建議你創建的預期大小的兩個表,並針對它們運行預期的操作(SELECTINSERTUPDATEDELETE),並測量結果...

通常情況下,這種說法,你可以工作委託給你的數據庫:

ALTER TABLE my_table 
MODIFY key_column BIGINT NOT NULL; 
0

數據庫不使用Java類型,可以翻譯使用SQL類型/映射到Java。

您應該使用自然適合您的應用的類型,因爲正確性通常比速度更重要。

longLongString之間的區別是亞微秒在Java中,如果這對你很重要,你不應該使用一個數據庫做查詢,但在內存中緩存中的所有數據,並使用像TLongObjectHashMap集合

0

沒有明智的方法來回答這個問題。主鍵是數據庫的邏輯功能,而性能取決於物理實現以及您想要對其執行的操作。你也許會問:「紅車比藍車快嗎?」

對於不同的數據類型,兩種不同的鍵約束在功能上並不等同。所以即使有必要的上下文,它也是一個很奇怪的可能不是很有用的比較。