如果将动态行移到末尾,那么获取数据的速度有什么不同吗?
例如: int,text比int更好int text int?
我的领导已经告诉了我这个事实,为什么没有这样的信息从互联网上得到?请帮帮忙?
发布于 2012-07-20 00:34:50
这是由于数据对齐造成的。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 documentation
http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html
发布于 2012-07-20 00:59:13
TEXT和BLOB数据存储在与列本身不同的空间中。它们被存储在为此目的而保留的特殊区域中。
这些列的检索速度总是比较慢,但是根据系统调优和数据加载的不同,速度减慢的程度会有很大不同。有时它是无关紧要的,有时会导致严重的震撼。只需注意,如果可以的话,您应该在TEXT字段上使用较短的VARCHAR字段,因为较长的blob字段不是免费的。
也就是说,TEXT列作为指向实际数据的指针存储在行中,这使得它们在大多数情况下比VARCHAR小得多。如果不选择它们,它们就不会被加载,也不会产生组装数据所需的额外寻道。
要确保这适用于您的MySQL版本和调优,请构建两个充满代表性数据的大型表,并自行对其进行基准测试。
https://stackoverflow.com/questions/11565295
复制相似问题