トップページ -> 教材 -> リレーショナルデータベースの基礎 -> データベースファイルの統計情報
[サイトマップへ], [サイト内検索へ],

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

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

演習

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

演習で行うこと


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/

  2. sqlite3_analyzer-3.7.1.zip の解凍

    解凍すると sqlite3_analyzer.exe ができる.

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


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

  1. Sqliteman を終了しておくこと (Exit the Sqliteman)

  2. SQLite 3 Analyzer を用いた「情報ファイル」の生成

    ■ Ubuntu の場合

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

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

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

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

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

      cd SQLite
      ./sqlite3_analyzer mydb > dbinfo.sql
      

      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-get 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 
      

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

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

      .\sqlite3_analyzer.exe mydb > dbinfo.sql
      

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

    ■ Ubuntu の場合

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

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

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

    cd SQLite
    sqlite3 mydb
    

    Windows の場合

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

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

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

  4. dbinfo.sql の実行 (Execute dbinfo.sql)
    .read dbinfo.sql
    

  5. SQLite の終了 (End SQLite)

    .exit」で終了.

  6. Sqliteman の起動 (Start Sqliteman)

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

    Ubuntu での SQLiteman の起動例

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

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

    Windows での SQLiteman の起動例

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

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

  7. File」→ 「Open

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

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

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

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

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

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

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

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

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

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

  11. Sqliteman を終了 (Exit the Sqliteman)

演習問題

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

次の問いに答えよ. 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')

このテーブル定義には 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;

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;


結合問い合わせの 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; 

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; 


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

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

最初,カーソルは二次索引の先頭ページにセットされる. 二次索引の中から,「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)