sql - SQL 查询 - 十六进制与十进制值
问题描述
我希望能很快找到这个问题的答案,但令人惊讶的是,似乎在任何地方都看不到它。
我猜在 SQL 查询中与二进制常量的比较会比与十进制数的比较快,因为二进制常量可能是直接查找,而十进制数需要转换,但性能差异是否可测量?
换句话说,第一个查询比第二个更好吗?如果是这样,会好多少?
select *
from Cats
where Cats_Id = 0x0000000000000086
select *
from Cats
where Cats_Id = 134
解决方案
你的前提是基于一个误解:
二进制常量可能是直接查找,而十进制数需要转换
您输入的 SQL 由某些文本编码的字符组成;为简单起见,我们假设 ASCII。
在计算机的内存中,它由一长串二进制状态组成,我们通常写为0
and 1
,但也可以写为_
and |
。
ASCII字符串的二进制数据134
类似于__||___|__||__||__||_|__
. 字符串的二进制数据0x0086
看起来像__||_____||||_____||______||______|||_____||_||_
当实际处理数据时,例如比较数字,计算机将使用完全不同的表示。“一百三十四”这个数字看起来更像|____||_
。
因此,无论您使用哪种表示形式,都会进行转换。
尽管如此,通过一些附带的实现细节,一种转换可能更有效,但幅度如此之小,以至于几乎不可能在您正在测试的系统的噪声中进行测量。
推荐阅读
- linux - MacOS 中的 Bash 脚本与 LInux 有何不同?
- php - Laravel 调用未定义的方法 App\\Model ::mapInto(), vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php
- c++ - MSVC 是否支持 C++11 样式的属性而不是 __declspec?
- python - for 关键字是否理解字符串是迭代?
- flutter - 如何在 post 方法中包含对象?HTTP
- android - Android如何创建梯形形状
- java - 在 Java 运算符方面需要一些帮助,得到“一元运算符的错误操作数类型 int”错误
- python - 带有池和上下文管理器的 Python 多处理
- python - 如何使用 python 从分组数据框中插入图表名称作为变量?
- c++ - 如何在 POSIX 共享内存中管理类型安全