6

如果将动态行移到末尾,则获取数据的速度是否有任何差异。

例如: int , int , int , text 好于 int int text int ?

我的领导告诉我这个事实,怎么从来没有从互联网上得到这样的信息?请帮忙 ?

4

2 回答 2

3

这是由于数据对齐。INT占用 4 个字节,因此 32 位(相当于 4 个字节)处理器将处理 4 个字节序列中的数据。能够以最适合处理器的顺序提取数据将导致更快的结果和更好的性能。

参考http ://en.wikipedia.org/wiki/Data_structure_alignment

现在,这是通过通信通道传输数据时经常发现的问题(因为某些编译器通常会通过将保留字节添加到 4 字节对齐某些成员来优化您的数据结构)。NDBCLUSTER然而,MySQL 也将 4 字节对齐与引擎考虑在内。这意味着通过将TEXT结构放置在INT值之间,您会强制检索不必要的数据。

因此:

INT INT INT INT TEXT由于处理器INT INT TEXT INT INT可以立即检索 16 字节(四个INT)而不用担心TEXT.

有关更多详细信息,请参阅MySQL 文档

http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html

于 2012-07-19T16:34:50.163 回答
1

TEXT并且BLOB数据不存储在与列本身相同的空间中。它们存储在为此目的而保留的特殊区域中。

这些列的检索速度总是较慢,但根据您的系统调优和数据负载,减速量会有很大差异。有时它是无关紧要的,有时它会导致严重的颠簸。请注意,如果您可以管理它,您应该在字段上使用短VARCHAR字段TEXT,因为 blob 字段的更长长度并不是免费的。

话虽如此,TEXT列作为指向实际数据的指针存储在行中,这使得它们比VARCHAR大多数情况下要小得多。如果您不选择它们,它们就不会被加载,并且您不会招致组装其数据所需的额外搜索。

为确保这适用于您的 MySQL 版本和您的调优,请构建两个充满代表性数据的大型表并自行对其进行基准测试。

于 2012-07-19T16:59:12.733 回答