mysql估算存儲數據量


  我們上學的時候,學校會將學生按年級分開,年級又按照班級分開,班級可能又按照組分開。學校為什么要這樣做呢?答案很明顯,方便組織管理。不同的事情,需要不同的組織形式:班級里收集作業可以以小組為單位;年級內組織活動可以以班級為單位;學校里組織考試可以以年級為單位。在面對相同屬性的事物時,通過組織分類可以極大地方便管理工作。同理,計算機中的數據都是以二進制形式存儲,為了更好地組織數據,磁盤以扇區(512B)為最小存儲單位,文件系統(多種文件系統不同)又以塊(4KB)為讀寫數據的最小單位,內存以頁(4KB)為數據的最小存儲單位。mysql中也有頁的概念,並且其大小是16KB.頁是innodb磁盤管理的最小單位。
  mysql是以B+樹的數據結構存儲數據的。B+樹只有葉子節點存儲具體數據,非葉子節點只存儲索引。比如我們一行數據的大小為1KB,則1頁可以存儲16條數據。索引列使用bigint類型(8B)再加上索引的其它信息,估算為20B。mysql的第一層存儲索引,161024/20=819.則第一層可以存儲819個索引,第二層可以存儲819819=670761個索引。第三層存儲數據,則可以存儲67076116=10732176條數據。
  mysql的第一層是只有一頁,第二層有819頁,第三層有670761頁。這樣我們查找一條數據,最壞的情況也只需要讀3次磁盤。
  其實索引並不占多少空間,主要還是數據占空間。上例的索引占空間為(1+819)
16KB=13MB.數據占空間為670761*16KB=10G.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM