SQLiteのアーキテクチャ
Understanding The Architecture Of SQLite。なるほど、行を挿入すると自動的にROWIDという名前の値が振られ、その値を元にB木が構築されるわけですね。Any column declared INTEGER PRIMARY KEY is an alias for the ROWIDだそうで、このINTEGER PRIMARY KEYを指定して特定された行を取ってくる処理に関してはlog(N)のオーダーになる、と。その他の列を指定して取ってくる処理もあらかじめその列のインデックスを作っておけばlog(N)になるわけですね。ランダムアクセスは速いのですが、逆に「特定のテーブルを丸ごと取ってきてすべてのデータについて解析」なんて目的にはあまり意味がないですね。むーん。