查询效率有区别吗? create tab xxxx( ID char(36) not null ........)create tab xxxx( ID Long not null ........)是这二个表比较查询速度 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用char(36)的话会比较36次(逐个字符比较)所以比较慢 只要设置了Index这两个查询速度不会有太大差别的 对于比较,理论上来说,LONG型要快。假设你的机器是32位(如果你的机器是RS6000等64位类似),LONG型比较最快需要一次,最慢需要2次运算,期望是1.5次CHAR(36)字符比较最快要1次,最慢需要32次。期望是16次。所以对于查询一个数据,理论上大概是10倍。如果有索引,在一个几百万的数据中查找,由于使用的总查找次数(索引用的是B+树)不会超过10次,所以绝对次数不多,多耗的时间不明显,故你感觉不到。但是,当你有另外的表B做表连接到这个表时,他会对B表中的每一条记录在这个表中做查询,他的绝对比较次数就比较大了。他的时间消耗就有非常明显的差异做查找,由于是 你发的短信我看了:上面说的是理想化的,实际情况有很多没有考虑如果你的CHAR(36)实际存的并没有到36个,你大多数如果长度在8的话,他的期望应该是4次。这只是说了CPU用于比较的时间复杂度。其实由于你的内存不是非常充足,他就不断的读写数据页我们知道,对于读数据页这种磁盘操作非常耗时间。比较所花费的时间相比较起来就微不足到了。实际的时间可以近似为页面的读取次数了。因而如果是第一次,没有缓存,他们的速度有很难预测。以下是我的推测:你是20000万条,且数据一样。看来你的字符的主键长度实际上大多数是5到6位。这样也反过来推测SQL SERVER的字符串在索引策略是采用变长(这个与具体的数据库厂商有关)的,也是5到6个字节。而你的INT是4个字节。所以页节点大概是21叶子页+1个根页。分为2层。字符的是26叶子节点+1个根节点(按4K/页算)。我建议你使用更多的数据,更长的关键字做比较。 同一台电脑上不同版本数据库公用一个端口 怎么用结果集填充临时表 SQL函数 数据库附加失败的问题! 执行update很简单的语句竟然出错!!哭 我知道这个问题能用游标解决,可是我不知道怎么写 sql语言错误 我的SQLserver服务器,运行一段时间后会被莫名其妙的停掉,我的机子上装了瑞星,没有木马,请各位大虾帮忙呀!!!! 请问SQL SERVER 的存储过程是否可以传递结果集?可以,如何使用? java.io.IOException: No more data to read from socket 急问,怎么选择数据库的存放位置? 如何查询表中两条完全相同的记录?
所以比较慢
LONG型比较最快需要一次,最慢需要2次运算,期望是1.5次CHAR(36)字符比较最快要1次,最慢需要32次。期望是16次。所以对于查询一个数据,理论上大概是10倍。
如果有索引,在一个几百万的数据中查找,由于使用的总查找次数
(索引用的是B+树)不会超过10次,所以绝对次数不多,多耗的时间
不明显,故你感觉不到。
但是,当你有另外的表B做表连接到这个表时,他会对B表中的每一条记录
在这个表中做查询,他的绝对比较次数就比较大了。他的时间消耗就有
非常明显的差异
做查找,由于是
我们知道,对于读数据页这种磁盘操作非常耗时间。比较所花费的时间相比较起来就微不足到了。
实际的时间可以近似为页面的读取次数了。因而如果是第一次,没有缓存,他们的速度有很难预测。
以下是我的推测:
你是20000万条,且数据一样。看来你的字符的主键长度实际上大多数是5到6位。这样也反过来推测
SQL SERVER的字符串在索引策略是采用变长(这个与具体的数据库厂商有关)的,也是5到6个字节。而你的INT是4个字节。所以页节点大概是21叶子页+1个根页。分为2层。字符的是26叶子节点+
1个根节点(按4K/页算)。我建议你使用更多的数据,更长的关键字做比较。