近日听同事谈论索引时听说:
假设同样两张表A和B、字段名、数据内容完全一样,同样有一个k列作为表的索引
只是,A中的k列为Varchar2型,B中的k列为NUMBER型,字段长度相同在同样对k列进行查询操作时,A表比B表要快有点想不通,所以特意来这里问一问各位高手,有什么理由么?
还是俺们那位同事在胡说呢?如果可以的话,也请同时提供一下答案的出处等,我也可以自己读一下相关的文章。
谢谢各位了
假设同样两张表A和B、字段名、数据内容完全一样,同样有一个k列作为表的索引
只是,A中的k列为Varchar2型,B中的k列为NUMBER型,字段长度相同在同样对k列进行查询操作时,A表比B表要快有点想不通,所以特意来这里问一问各位高手,有什么理由么?
还是俺们那位同事在胡说呢?如果可以的话,也请同时提供一下答案的出处等,我也可以自己读一下相关的文章。
谢谢各位了
感觉应该不是这样的,但是有没有找到什么权威性的书籍谈到过这里?
麻烦哪位大哥能够帮忙全面的解释一下,或是告诉我哪里可以找答案?
------------------
Typ=2 Len=2: 193,2SQL> select dump('1') from dual;DUMP('1')
----------------
Typ=96 Len=1: 49SQL> select dump(12) from dual;DUMP(12)
-------------------
Typ=2 Len=2: 193,13SQL> select dump('12') from dual;DUMP('12')
-------------------
Typ=96 Len=2: 49,50SQL> select dump(123) from dual;DUMP(123)
---------------------
Typ=2 Len=3: 194,2,24SQL> select dump('123') from dual;DUMP('123')
----------------------
Typ=96 Len=3: 49,50,51SQL> select dump(1234) from dual;DUMP(1234)
----------------------
Typ=2 Len=3: 194,13,35SQL> select dump('1234') from dual;DUMP('1234')
-------------------------
Typ=96 Len=4: 49,50,51,52SQL> select dump(12345) from dual;DUMP(12345)
------------------------
Typ=2 Len=4: 195,2,24,46SQL> select dump('12345') from dual;DUMP('12345')
----------------------------
Typ=96 Len=5: 49,50,51,52,53可以看到1位的时候,number比char型的数据占的空间更多。但是数字越大,char型的占用的空间就比number越来越多了。所以,还要根据你数据的具体数据来分析。如果数据量不大,这点差别基本应该没有太多的影响的,你看看两个索引的大小就可以知道了
就实际存储来说,对于给定的n, varchar(n)是可变长度 number(n)是固定长度。
当n小于某个值x时varchar的长度较小
当n大于某个值x时varchar的长度较大把A、B两张表的k列的平均长度统计出来或许对解释这个现象有帮助
同时还要考虑两张表是否有其它的不同:优化方式,存储连续性(行链接,索引碎片等),读写属性(只读表会快一些),性能收集数据准确性,索引数据的分布直方图等