我在整个应用程序中使用VARCHAR,并发现一些特别令人困惑的事情......为什么我需要用长度定义我的SQL VARCHAR列,如VARCHAR(50)或VARCHAR(1000)?这个长度限制允许我定义我的首选最大字符串长度的唯一目的是什么? VARCHAR(50)和VARCHAR(1000)之间是否存在性能差异?附加到VARCHAR的大小度量标准是什么?
2
A
回答
2
这完全取决于您的DBMS的内部。例如,如果您索引一个varchar列,几乎肯定会将关键部分设置为最大大小。
这是因为索引必须非常高效,并且您不希望在这种情况下使用可变长度字段,因为它可能会减慢速度。
即使在数据库的数据区域中,您也可能会发现它只允许最大的大小。我已经看到只将行中的指针存储到磁盘堆中的提议,但这意味着每行有两个磁盘读取,我无法看到这对于大规模性能是非常好的选择。
列的大小会影响性能,例如一次可以读入多少条记录,多少条记录可以放入n元树索引节点等等。
0
- SQLite:大小限制被完全忽略。
- PostgreSQL:
VARCHAR(N)
基本上相当于TEXT CHECK (LENGTH(x) <= N)
。声明最大大小没有性能优势。 - MySQL:确定字符串长度是存储为一个字节还是两个字节。
- Oracle:较高的大小限制有一个performance disadavantage。
- MS SQL Server:大于900字节的VARCHAR列无法建立索引。
相关问题
- 1. 什么是MySQL的最佳varchar大小?
- 2. “附加到标准流”是什么意思在码头?
- 3. 为什么度量标准实现需要性能度量标准库?
- 4. Page Graph API下talking_about_count的度量标准是什么?
- 5. 什么是地点的最佳距离度量标准
- 6. 什么是LDC度量标准和LDC的完整形式
- 7. MYSQL Spatial中使用的度量标准是什么?
- 8. 什么是矢量长度和矢量缓存大小?
- 9. 什么是coinbase的大小和数量?
- 10. 批量标准是否需要恒定的批量大小?
- 11. 如果达到标识列的最大值,会附加什么?
- 12. re.findall() - 附加标准
- 13. 与附加标准
- 14. Android是什么加速度计的最小和最大范围
- 15. 什么是VARCHAR(255)
- 16. MySQL的VARCHAR大小?
- 17. 添加getter和setter到Object.prototype的“标准方式”是什么?
- 18. 使用LR_SHARED的LoadImage函数(Windows),图像的标准大小是什么?
- 19. 共享常量定义变量的标准是什么
- 20. 什么是Docker附加?
- 21. 什么是附加事件?
- 22. @计划和调度程序:池大小到底是什么?
- 23. SQL:LEFT JOIN与附加标准
- 24. 附加数据,标准化
- 25. 什么是24小时显示时间跨度的标准方式?
- 26. 什么是附加到TFS变更数量
- 27. varchar的后果是什么?
- 28. Ganglia dfs.namenode.fileinfoops中的Hadoop度量标准。它意味着什么?
- 29. 的标准是什么是内联
- 30. 是什么标签附加到枚举值
有趣的想法。但是,为什么索引长度取决于基础的varchar大小?我认为索引基本上是一个哈希表算法,使它们在某种程度上独立于列内容? – 2011-02-15 03:38:41