トップページ -> インストール,設定,利用 -> SQLite 3 とSQL 演習 -> データベースファイルの統計情報
[サイトマップへ], [サイト内検索へ]

データベースファイルの統計情報

演習


SQLite 3 Analyzer のインストール (Install SQLite 3 Analyzer)

■ Ubuntu の場合

http://www.sqlite.org/ から Linux 用のファイルを入手.

■ Windows の場合

  1. sqlite3_analyzer-3.7.1.zip の入手

    http://www.sqlite.org/

    [image]

    [image]
  2. sqlite3_analyzer-3.7.1.zip の解凍

    展開(解凍)すると sqlite3_analyzer.exe ができる.

  3. sqlite3_analyzer.exe を C:/SQLite にコピー

    [image]

SQLite 3 Analyzer を用いたデータベース情報の確認 (Examine Database Information using SQLite 3 Analyzer)

  1. Sqliteman を終了しておくこと (Exit the Sqliteman)
  2. SQLite 3 Analyzer を用いた「情報ファイル」の生成

    ■ Ubuntu の場合

    端末を開き,次のように操作する.

    データベースの情報はファイル dbinfo.sql に格納することにする. このファイル名はなんでも良いが、アルファベットのみを使うのが良い.

    1. 端末を開きたいので,「アクセサリ」→「端末」と操作する

      [image]
    2. SQLite データベース・ディレクトリ SQLite に移り, SQLite 3 Analyzer を起動する.

      このとき,データベース名として mydb を指定する.(The logical database name is 'mydb').

      cd SQLite
      ./sqlite3_analyzer mydb > dbinfo.sql
      

      [image]
      64 ビット版の Linux を使っている場合, 「./sqlite3_analyzer: error while loading shared libraries: libtcl8.5.so: wrong ELF class: ELFCLASS64」というエラーメッセージが出て動作しない。 配布されている sqlite3_analyzer のプログラムが 32 ビット 版 Linux 用なので,動かないのは当然であるが,次の手順で, 32 ビット版 Linux 用 sqlite3_analyzer を 64 ビット版 Linux で動かすことができる.

      /home/windowslike/SQLite」の部分は適切なディレクトリに読み替えてください。

      cd /tmp
      sudo apt -yV install ia32-libs
      apt-get source tcl8.5-dev 
      build-dep tcl8.5-dev 
      cd tcl8.5-8.5.9
      sudo CC="gcc -m32" CXX="g++ -m32" dpkg-buildpackage -rfakeroot 
      cd unix
      cp libtcl* /home/windowslike/SQLite
      
      LD_LIBRARY_PATH=/home/windowslike/SQLite sqlite3_analyzer 
      

    ■ Windows の場合

    1. Windows のコマンドプロンプトで,次の操作を行う.(Use the Windows command prompt, and do the following).

      SQLite データベース・ディレクトリ C:\SQLite に移る.

      C:
      cd C:\SQLite 
      

      [image]
    2. SQLite 3 Analyzer の起動 (Start the SQLite 3 Analyzer).

      このとき,データベース名として mydb を指定する.(The logical database name is 'mydb').

      .\sqlite3_analyzer.exe mydb > dbinfo.sql
      

      [image]
  3. SQLite の起動 (Execute the SQLite. The database name 'mydb' is specified.)

    ■ Ubuntu の場合

    端末を開きたいので,「アクセサリ」→「端末」と操作する

    [image]

    SQLite データベース・ディレクトリ SQLite に移り, SQLite を起動する.

    このとき,データベース名として mydb を指定する.(The logical database name is 'mydb').

    cd SQLite
    sqlite3 mydb
    

    [image]

    ■ Windows の場合

    SQLite データベース・ディレクトリ C:\SQLite に移り, SQLite を起動する.

    このとき,データベース名として mydb を指定する.(The logical database name is 'mydb').

    C:
    cd C:\SQLite
    .\sqlite3.exe mydb
    

    [image]
  4. dbinfo.sql の実行 (Execute dbinfo.sql)
    .read dbinfo.sql
    

    [image]
  5. SQLite 3 の終了 (End SQLite)

    .exit」で終了.

    [image]
  6. Sqliteman の起動 (Start Sqliteman)

    「Sqliteman」 のアイコンをダブルクリック (double click "Sqliteman.exe")

    Ubuntu での SQLiteman の起動例

    プログラミング」→「Sqliteman」と操作する.

    [image]

    SQLiteman の新しいウインドウが開く.(A New window appears)

    Windows での SQLiteman の起動例

    「SQLiteman」 のアイコンをダブルクリック (double click "SQLiteman.exe")

    [image]

    SQLiteman の新しいウインドウが開く.(A New window appears)

  7. File」→ 「Open

    [image]
  8. データベースファイルを開く (Open Database File)

    Ubuntu での実行例(「SQLite/mydb」を開く場合)

    データベースファイル SQLite/mydb を選び, 「開く」をクリック (Click '開く' after choosing the database file "SQLite/mydb")

    [image]

    Windows での実行例(「C:\SQLite\mydb」を開く場合)

    データベースファイル C:\SQLite\mydb を選び, 「開く」をクリック (Click '開く' after choosing the database file "C:\SQLite\mydb")

    要するに,/home/<ユーザ名>/SQLite のの mydb を選ぶ. 

    [image]
  9. オブジェクト・ブラウザ (Object Browser) の中の「Tables」を展開すると,テーブルの一覧 (List of Tables) が表示される (List of tables appears by clicking 'Tables')

    [image]
  10. 次に,テーブル space_usedを選ぶ (Select table 'space_used')

    [image]

    すると,データベースの情報が表示される

    int_pages, leaf_pages, ovfl_pages の列は,は各テーブルが占有しているページの数を示している. (Number of pages which each table occupies)

    [image]
  11. Sqliteman を終了 (Exit the Sqliteman)

    [image]

演習問題

次の問いに答えよ. Answer the following questions.

問い (Questions)

次の PTABLE テーブルに関する問題 (About the following 'PTABLE' table)

name    |  type   |  color
------------------------------
apple   |  fruit  |  red
apple   |  fruit  |  blue
rose    |  flower |  white
rose    |  flower |  red
rose    |  flower |  yellow

SQL を用いて PTABLE のテーブル定義を書きなさい (Write the table defintion of the table PTABLE using SQL)

SQL を用いて属性 name の二次索引を生成しなさい (Write a SQL to generate a secondary index on the attribute 'name')


本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]

このテーブル定義には PRIMARY KEY が無いので, データベース管理システムは,各レコードのキー値 (Key Value) を自動生成する.

Database system generates a key value for each record automatically. 以下、書きかけ

結合問い合わせの SQL 問い合わせ計画の表示例 (SQL query plan)

SELECT zips.zipcode, zips.choiki_kanji, shichosons.shichoson_kanji, kens.ken_kanji
FROM zips, kens, shichosons
WHERE zips.jiscode = shichosons.jiscode
      AND shichosons.ken_kanji=kens.ken_kanji
      AND kens.id = 43;

[image]

SQL 文の前に「EXPLAIN」を付ける.(Add 'EXPLAIN' before a SQL statement)

EXPLAIN SELECT zips.zipcode, zips.choiki_kanji, shichosons.shichoson_kanji
FROM zips, shichosons
WHERE zips.jiscode = shichosons.jiscode
      AND kens.id = 43;

EXPLAIN SELECT zips.zipcode, zips.choiki_kanji, shichosons.shichoson_kanji, kens.ken_kanji
FROM zips, kens, shichosons
WHERE zips.jiscode = shichosons.jiscode
      AND shichosons.ken_kanji=kens.ken_kanji
      AND kens.id = 43;

[image]
[image]

結合問い合わせの SQL 問い合わせ計画の表示例 (SQL query plan)

今度は結合問い合わせである (join query)

問い合わせ計画の表示 (query plan)

今度は,先ほどと同じ SQL 問い合わせを評価させる. 評価結果は同じになる. 評価にかかる時間は速くなる.

select distinct R.x 
FROM TT as R, TT as S 
WHERE R.choiki_kanji = S.choiki_kanji
      AND R.jiscode <> S.jiscode; 

[image]

SQL 文の前に「EXPLAIN」を付ける.(Add 'EXPLAIN' before a SQL statement)

EXPLAIN select distinct R.choiki_kanji 
FROM TT as R, TT as S 
WHERE R.choiki_kanji = S.choiki_kanji
      AND R.jiscode <> S.jiscode; 

[image]
[image]

【問い合わせ計画の要点】

二次索引が働くとき,処理は二次索引上で行われる.

最初,カーソルは二次索引の先頭ページにセットされる. 二次索引の中から,「jiscode = 40135」という条件式を満たす索引エントリを見つけ, そのエントリを使って,データが取り出される. カーソルは,二次索引の中だけを動く.

Sqliteman を用いた SQL 問い合わせ計画の表示

テーブルの全ての行の表示 (List all rows of a table)

【表示された問い合わせ計画の要点】

アドレス (addr) オペコード 主なオペランド  
2 OpenRead P2 = 14 ルート・ページが 14 であるようなテーブル (この場合は,テーブル results) のカーソルを作る (Open table 'results' for read, and make a cursor)
3 Rewind P2 = 10 カーソルを,テーブルの先頭を指し示すようにする.テーブルが空の場合には,アドレス 10 (Close)にジャンプする (Use the first row. If the first row is empty then jump to '10')
4,5,6,7 Column P2 = 0,1,2,3, P3 = 1,2,3,4 列番号0, 1, 2, 3の値を,それぞれレジスタ1,2,3,4に格納する. (#1, #2, #3, #4 values are stored into registers)
8 ResultRow P1 = 1, P2 = 4 レジスタ 1 からレジスタ 4 までの値を1行として出力する (Generate output using registers)
9 Next P2 = 4 もし,カーソルが指し示すレコードが末端レコードならば、次の命令に進む. もし,カーソルが指し示すレコードが末端レコードでなければ、カーソルを1つ進めて、アドレス4 にジャンプする. (Advance cursor to the next tow. If there are more rows, then jump to the address '4')

条件を満足する行のみの表示 (List the rows which satisfy a given condition)