當我創建數據庫表(在我的情況下,其平時的ArcGIS地理數據庫,但我相信這些問題是所有數據庫中一樣)我發現很難準確地判斷文本字段的所需長度,所以我高估了它(50或100)。這會顯着影響數據庫所使用的性能和磁盤空間嗎?是否有任何特別高效的長度(如8,16,32,64)?什麼影響允許文本字符串的長度對性能和尺寸
或者我應該繼續讓我的數據庫的靈活?
當我創建數據庫表(在我的情況下,其平時的ArcGIS地理數據庫,但我相信這些問題是所有數據庫中一樣)我發現很難準確地判斷文本字段的所需長度,所以我高估了它(50或100)。這會顯着影響數據庫所使用的性能和磁盤空間嗎?是否有任何特別高效的長度(如8,16,32,64)?什麼影響允許文本字符串的長度對性能和尺寸
或者我應該繼續讓我的數據庫的靈活?
字符串是不是真的內存密集型,每個字符通常只存在了2個字節(支持各種語言),唯一的原因,你應該使用更短的字符串,然後較長的,如果你正在做對他們的某些操作,因爲字符串通常只是一個字符數組,而且字符串越大,就需要做更大的操作。
所以一般情況下,爲一個字符串保留100個字符會導致200字節爲0.2KB,並且1000個字符串會小於0.2 MB,所以這應該不是真正的問題,除非您將所有內容都存儲在RAM中在一個256MB RAM的迷你電腦上。
答案:對尺寸(實際看到)的影響不是很大,對性能的中等影響(以納秒爲單位)是因爲迭代每個字符,例如與長字符串中的另一個字符進行比較可能會比較激烈,但沒什麼可擔心的關於直到您比較上千串與成千上萬的其他琴絃的
這是非常供應商和產品,因此,具體的 - 但總的來說:**是**,較大的字符串會因爲更多的數據需要疼的表現,只是普通的被洗牌。一般來說,不,沒有「魔術」字符串長度對性能有好處,比如15,255等。 - 只要你需要它們就定義你的字符串 - 但不能超過這個長度! –
爲了增加marc_s評論:爲什麼這是DBMS相關的一個例子是:在Postgres裏絕對不會有任何區別在數據存儲之間的varchar'的方式(10)','VARCHAR(7665)'和'text'(以允許「無限」值)。對於Oracle或SQL Server,如果選擇'varchar'(有限長度)或'CLOB' /'varchar(max)'(無限長度),它確實會有所幫助。有關於dba.stackexchange.com這個討論前一段時間,但我無法找到它了 –
見:http://stackoverflow.com/a/14375343/330315和http://dba.stackexchange.com/q/20974/1822進行DBMS特定討論。 –