and*_*ykx 13 mysql database primary-key
使用字符串作为主键而不是bigints等会有什么性能损失?字符串比较比整数比较昂贵得多,但另一方面,我可以想象在内部DBMS将计算散列键以减少惩罚.
我工作的应用程序使用字符串作为几个表(MySQL)中的主键.改变这一点并非易事,我想知道可以通过哪些方式获得合理的工作.
另一方面,我可以想象 DBMS 在内部会计算哈希键以减少惩罚。
数据库需要维护一个带有键的B 树(或类似的结构),以便对它们进行排序。
如果密钥经过哈希处理并将其存储在 B 树中,则可以快速检查密钥的唯一性- 仍然可以有效地查找密钥。但是您将无法有效搜索数据范围LIKE(例如使用),因为 B 树不再根据字符串值进行排序。
所以我认为大多数数据库实际上将字符串存储在 B 树中,这可能(1)比数值占用更多空间,并且(2)如果以任意顺序插入键(没有概念),则需要重新平衡B 树与数字 pk 一样增加价值)。
实践中的处罚可以是微不足道的,也可以是巨大的。这一切都取决于用法、行数、字符串键的平均大小、连接表的查询等。
| 归档时间: |
|
| 查看次数: |
3141 次 |
| 最近记录: |