一个数据库文件 ---------  多个 B-trees
一个 B-tree          ---------  一个table or index
一个 B-tree          ---------  多个pages( 一个page默认大小1024Btyes )
一个 B-tree          ---------  在root page 中有一个id
一个 B-tree 每行  ---------  一个 RowID 即 表的 key

rowid 按顺序储存

SELECT y FROM ex1 WHERE x= "dddd" 如何没有索引表,则时间复杂度:
为 O(n); 依次序要查找,即线性查找,如果查找RowId ,则时间复杂度: O(logN);


语句SELECT y FROM ex1 WHERE x="dddd":
在索引表中带有 rowid , 利用索引表查找的时间复杂度: O(logN)
利用二分法查找!

 优化:
 SELECT * FROM t1, t2 WHERE t1.rowid=t2.a;

 伪代码:复杂度O(n*n)
  for each row in t1:
     for each row in t2:
       if (t1.rowid = t2.a) continue
       output one row of result
     end
  end

SELECT * FROM t2, t1 WHERE t1.rowid=t2.a;

伪代码:复杂度O(n*logN)
for each row in t2:
     lookup the row in t1 where t1.rowid=t2.a
     output one row of result
end

同效果不同的语句可能产生不一样的速度,所以商用数据库的底层优化工作很重要
取决于执行伪代码(汇编代码)