首页 > 解决方案 > SQL 查询 - 十六进制与十进制值

问题描述

我希望能很快找到这个问题的答案,但令人惊讶的是,似乎在任何地方都看不到它。

我猜在 SQL 查询中与二进制常量的比较会比与十进制数的比较快,因为二进制常量可能是直接查找,而十进制数需要转换,但性能差异是否可测量?

换句话说,第一个查询比第二个更好吗?如果是这样,会好多少?

select *
from Cats
where Cats_Id = 0x0000000000000086
select *
from Cats
where Cats_Id = 134

标签: sql

解决方案


你的前提是基于一个误解:

二进制常量可能是直接查找,而十进制数需要转换

您输入的 SQL 由某些文本编码的字符组成;为简单起见,我们假设 ASCII。

在计算机的内存中,它由一长串二进制状态组成,我们通常写为0and 1,但也可以写为_and |

ASCII字符串的二进制数据134类似于__||___|__||__||__||_|__. 字符串的二进制数据0x0086看起来像__||_____||||_____||______||______|||_____||_||_

当实际处理数据时,例如比较数字,计算机将使用完全不同的表示。“一百三十四”这个数字看起来更像|____||_

因此,无论您使用哪种表示形式,都会进行转换。

尽管如此,通过一些附带的实现细节,一种转换可能更有效,但幅度如此之小,以至于几乎不可能在您正在测试的系统的噪声中进行测量。


推荐阅读