Mysql通过非常大的数字排序行.加载时间


mysql ordering rows by very large numbers. loading time

我现在进退两难。我通过两个字段从表中提取数据:

**field 1**             
1979385197241 
1235467
95823352353
9089892189735
versus
**field 2**
6
2
7
2
1

假设表有大约2000行和40个字段。加载时间是否会有很大的不同,我应该按一个还是另一个字段来排序?

我问这个问题是因为较大的数字是活的,而较小的数字是由较大的数字的cronjob更新的。如果我按字段2对行排序,就会得到实时结果。不需要cronjob

如果您关心排序的性能,那么最重要的事情是正确使用索引。您通常应该在您希望在ORDER BY子句中使用的列上创建索引。

然而,只有2000行在你的表中,我想它会相当快,即使没有索引。

按数字排序是一种二进制比较操作,对于任何不超过处理器整数大小(通常为32位)的操作都将在相同的时间内完成。在任何一种情况下,两个数字都可能在单个处理器指令(Intel assembly: cmp)中进行比较。是时候加载寄存器和检查值了。只有在32位系统中使用64位数字并且两个数字的前32位是相同的,才会花费更多的时间来比较较大的数字和较小的数字。所有排序操作都是通过一次比较两个数字来完成的。

实际上,永远不要担心你排序的数字的大小。9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 CMP 1—与2 CMP 1相同的时间—我们立即知道我们不必检查第一个字符串9的完整长度

最好两种方法都测试,但我认为按字段2排序不会有任何性能损失。