2011-06-06 91 views
0

它們有各種不同的大小,但是彼此之間的性能問題呢?我們如何在sql中比較它們?Bit vs Int vs Long(Sql的性能問題)

+4

我相信性能將取決於實現(可能也取決於架構) – 2011-06-06 06:30:52

+1

選擇類型的最佳方法是它存儲您需要存儲的內容並且不超過您需要的內容。如果您只會存儲數字1到10,請選擇將存儲1到10的最小整數,然後拋出檢查約束以保持1到10並將其稱爲好。 – 2011-06-06 06:52:02

回答

0

它取決於數據庫供應商的I/O實現。

編輯(「32位」變爲「8位」)

許多數據塊從不使用任何小於一個8位字節寫入到磁盤。例如,postgres doco指出,其數據類型boolean存儲在磁盤(不是1位)時實際上需要1個字節。所有postgres類型都使用整數個字節。

當字段被索引時,磁盤上的空間更爲重要。空間越少意味着每個I/O頁面的索引條目越多。 I/O越少,查詢速度越快 - 回想起I/O大約比內存中的工作慢1000倍。

+0

你確定嗎(更小的類型升級到32位) - 你能提供任何證據嗎? – 2011-06-06 06:34:54

+1

大多數DB可能永遠不會使用任何東西,除了塊大小寫入磁盤,現在MS SQL Server上的8KB,可在Oracle上設置。但是,當在存儲中佈置記錄時,至少某些DB對不同類型使用不同的存儲容量。例如,請參閱:http://support.microsoft.com/kb/827968。另外一些數據庫將根據值存儲不同數量的字節數,而不是類型,請參閱:http://www.sqlite.org/fileformat2.html#varint和http://asktom.oracle.com/pls/asktom/f?p = 100:11:0 :::: P11_QUESTION_ID:1856720300346322149 – 2011-06-06 06:49:38

+0

@ Will-A - 我檢查了一下,我錯了32位 - 參見編輯 – Bohemian 2011-06-07 00:55:13

0

主要的性能問題可能源於數據的大小 - 字段越大,佔用的磁盤空間越多,因此數據中要讀取的I/O也越多。當你處理有數百萬條記錄的表時,這可能會非常重要。