首頁  >  文章  >  資料庫  >  MySQL中int、char以及varchar的效能對比

MySQL中int、char以及varchar的效能對比

不言
不言轉載
2018-10-13 15:04:413000瀏覽

這篇文章帶給大家的內容是關於MySQL中int、char以及varchar的效能對比,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

網路上有許多似是而非的“謠言”,當然都不是惡意,絕大部分都是開發者不願意自己主動研究,反而輕信其他人的信口之言。

關於資料庫的謠言也有不少,像是「int效能比char高很多」。

我最近針對int、long、char、varchar進行了一次效能測試,發現它們其實並沒有太大的效能差距:

備註:c8=char(8), s8= varchar(8), i8=(bigint), c4=char(4), s4=varchar(4), i4=char(4)

#100w行無索引情況下查詢:
執行[c8查詢]20次, 平均耗時312.0ms
執行[s8查詢]20次, 平均耗時334.3ms
執行[i8查詢]20次, 平均耗時276.95ms
執行[c4查詢]20次, 平均耗時354.95ms
執行[s4查詢]20次, 平均耗時340.45ms
執行[i4查詢]20次, 平均耗時291.1ms

建立索引:
c8索引耗時2439ms
s8索引耗時2442ms
i8索引耗時1645ms
c4索引耗時2296ms
s4索引耗時1645ms
c4索引耗時2296ms

s4索引耗時時2303ms

i4索引耗時1403ms
有索引情況下查詢:

執行[c8查詢]10000次, 平均耗時0.271ms
執行[s8查詢]10000次, 平均耗時0.2354ms
執行[i8查詢]10000次, 平均耗時0.2189ms
執行[c4查詢]10000次, 平均耗時0.303ms

執行[s4查詢]10000次, 平均耗時0.303ms

執行[s4查詢] 10000次, 平均耗時0.3094ms 執行[i4查詢]10000次, 平均耗時0.25ms

結論:

無索引:全表掃描不會因為資料較小就變快,而是整體速度相同,int/bigint作為原生型別稍快12%。
有索引:char與varchar效能差不多,int速度稍快18%在資料儲存、讀寫方面,整數與等長字串相同,varchar額外多了一個位元組所以效能可能會些許影響(1/n)。
在資料運算、比較方面,整數得益於原生支持,因此會比字串稍快

一丁點

若採用索引,所謂整數、字串的效能差距更是微乎其微。 ######在實際開發中,許多開發者經常使用char(1)、char(4)這樣的字串表示類型枚舉,這種做法在我看來屬於最佳方案,因為這種做法在儲存空間、運算效能、可讀性、可維護性、可擴充性方面,遠勝於int、enum這種資料型態。 ###

以上是MySQL中int、char以及varchar的效能對比的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除