Mysql
InnoDB 中 Varchar(100) 上 MySQL 索引的儲存需求是什麼?
我有一個 InnoDB 表,其中有 EMail 列 (VARCHAR(100)),現在我將執行腳本,該腳本將散列一些電子郵件地址。我想知道,如果數據儲存存在差異(例如電子郵件的平均長度為 20 個字元,雜湊後為 64 個字元),索引儲存也會有差異嗎?
我之前討論過為 InnoDB 設置大的主鍵:我應該為這個 MySQL 表使用什麼儲存引擎?. 效果將是膨脹的鍵經歷所有輔助索引的線性增長,因為來自輔助鍵索引條目的 PRIMARY KEY 引用也將開始變得臃腫。
查看您的問題,您自己是說您將電子郵件地址從 20 個字元擴展到 64 個字元。您將膨脹具有電子郵件地址列的相關表的每個非唯一索引。如果電子郵件地址本身是主鍵,那麼無論索引是否具有電子郵件地址列,相關表的所有索引。Mysql int vs varchar as primary key (InnoDB Storage Engine?
CHAR 欄位比 VARCHAR 欄位讀取速度快已經夠糟糕了,但代價是索引更大(請參閱我的文章What is the performance impact of using CHAR vs VARCHAR on a fixed-size field?)。這樣做肯定會帶來配置挑戰,包括
- 擁有足夠大的 InnoDB 緩衝池 ( innodb_buffer_pool_size )
- 擁有足夠大的事務日誌 ( innodb_log_size_size )
- 擁有足夠的讀寫 IO 執行緒 ( innodb_read_io_threads , innodb_write_io_threads )
- 擁有足夠大的日誌緩衝區 ( innodb_log_buffer_size )
即使電子郵件地址沒有被索引,該 InnoDB 的數據頁面仍然會膨脹並且可能會出現碎片。既然你在散列,我可以假設你一定是在索引它。