解决方案 »

  1.   

    你可以认为联合索引是闯关游戏的设计例如你这个联合索引是state/city/zipCode那么state就是第一关 city是第二关, zipCode就是第三关你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关你不能直接到第二关的索引的格式就是第一层是state,第二层才是city
      

  2.   


    索引是有序的,而且是按照state/city/zipCode 这个顺序的,但是用前2列的话,就还是有序的?
    那数据库引擎是怎么查找索引的,这3个列顺序比较的还是怎么找的?
      

  3.   

    假设数据 表T (a,b,c) rowid 为物理位置
    rowid a b c
    (1) 1 1 1
    (2) 2 1 13
    (3) 2 2 14
    (4) 1 3 3
    (5) 2 3 12
    (6) 1 2 5
    (7) 2 3 9
    (8) 1 2 2
    (9) 1 3 6
    (10) 2 2 11
    (11) 2 2 8
    (12) 1 1 7
    (13) 2 3 15
    (14) 1 1 4
    (15) 2 1 10当你创建一个索引 create index xxx on t(a,b), 则索引文件逻辑上等同于如下
    a b rowid
    1 1 1
    1 1 12
    1 1 14
    1 2 6
    1 2 8
    1 3 4
    1 3 9
    2 1 2
    2 1 15
    2 2 3
    2 2 10
    2 2 11
    2 3 5
    2 3 7
    2 3 13当select * from T where a=1 and b=3 的时候, 数据库系统可以直接从索引文件中直接二分法找到A=1的记录,然后再B=3的记录。
    但如果你 where b=3 则需要遍历这个索引表的全部!