數據庫的索引是優化查詢性能的重要方式,索引文件大小也是評估索引效率的重要指標。在MongoDB和MySQL中,索引的實現和文件大小有所不同。下面分別介紹。
MongoDB
MongoDB的索引使用B樹實現,每個索引文件(.idx文件)對應一個B樹結構。每個B樹節點的大小是固定的,128字節(MongoDB 3.2之前)或255字節(MongoDB3.2及以后版本)。因此,對于相同的數據集,索引文件大小會受到索引字段個數、數據類型、數據分布、數據重復程度等因素的影響。
# 查看索引文件大?。▎挝唬鹤止潱? >db.collectionName.stats().indexSizes { "_id_" : 8192, "username_1" : 16384 }
上面的例子中,collectionName集合有兩個索引文件:_id_和username_1,它們的大小分別為8192字節和16384字節。
MySQL
MySQL的索引使用B樹或哈希表實現,每個索引文件(.MYI文件)對應一個B樹或哈希表結構。每個B樹節點的大小是動態的,取決于B樹的階數和索引字段類型(不同類型的索引字段存儲的大小不同)。對于哈希表,每個桶的大小是動態的,取決于桶內索引字段的個數和大小。
# 查看索引文件大小(單位:字節) >SHOW TABLE STATUS LIKE 'tableName'\G ... Index_length: 4096 ...
上面的例子中,tableName表的索引文件大小為4096字節。