Choco Soft

Nadesiko DE RDB

Choco Soft header image 2

【SQLite】で限界を極めろ!

2008年11月27日 · コメント(0) · マッハへの挑戦!【SQLite】, 特集

#————————————-
#■ プロローグ ■
#————————————-
【なでしこ】ネイティブである【SQLite】と言うRDB。
1ファイルDBでありながら、トランザクションにも対応。
小柄なDBでありながら、トリガーも可能、並みいるRDBと同等の高みに存在する。
単にテーブルを作成して、データを入れるだけではこのDBの真価はわからない。
このRDBに限界まで速さを求めた時、人は何を見るのだろう。

#————————————-
#■ 高速RDBを体感せよ! LEVEL1 ■
#————————————-
1.抽出するフィールドを最低限にしよう!
自分が必要とするフィールド以外は表示しないようにする事で、表示速度が上がります。
×:「SELECT * FROM テーブル名;」をSQLITE実行
◎:「SELECT NAME,TELL FROM テーブル名;」をSQLITE実行
(上記の場合には、仮に氏名を表示するフィールド「NAME」と電話番号を表示するフィールド「TELL」を指定しました。)

2.抽出行数を制限しよう!
特に1000件を超えるようなデータは全件を表示するでなく、必ず検索した値だけを表示もしくは一回に表示する件数を制限しましょう。
×:「SELECT * FROM テーブル名;」をSQLITE実行
◎:「SELECT * FROM テーブル名 LIMIT 50;」をSQLITE実行
(上記の場合には、一回あたりの最大表示件数を50件にしました。)

#————————————-
#■ 高速RDBを体感せよ! LEVEL2 ■ 【インデックスを貼れ】
#————————————-
インデックスキーを設定しよう!
検索に使うフィールドには、インデックスキーを設定しておきましょう。
「CREATE INDEX インデックス名 ON テーブル名(フィールド名) ;」をSQLITE実行

一つのテーブルにインデックスは、いくつ設定してもOKです!

#————————————-
#■ 高速RDBを体感せよ! LEVEL3 ■ 【インデックスに注意】
#————————————-
インデックスは通常だと完全一致のみをサポートします。
あいまい検索はインデックスを使わないので、高速になりません。

COLLATE NOCASEを設定しよう!
「CREATE INDEX インデックス名 ON テーブル名(フィールド名 COLLATE NOCASE);」をSQLITE実行

「SELECT * FROM テーブル名 WHERE フィールド名 COLLATE NOCASE LIKE ‘HOGE%’;」をSQLITE実行

SQLITEは大文字小文字を区別しません(デフォルト)
よって、上記のような書き方が必要になるのです。

#————————————-
#■ 高速RDBを体感せよ! LEVEL4 ■ 【トランザクションを使おう】
#————————————-
BEGIN~END
「TEST.DB」をSQLITE開いてHに代入
Hで「BEGIN」をSQLITE実行
「INSERT INTO テーブル名 NAME VALUES ‘CHOCO’」をSQLITE実行
Hで「END」をSQLITE実行
HでSQLITE閉じる。

上記のように、【BEGIN】と【END】で実行したいSQL文をはさんでやります。
通常は一行くらいのSQL文では効果が見られませんが、反復してデータを1,000件くらい入れるとかすると目に見えてスピードが違います。
これを使わない手はありません!

#————————————-
#■ 高速RDBを体感せよ! LEVEL5 ■ 【VACUUMを使おう】
#————————————-
SQLITEのような追記型のDBは、常にごみがたまるので掃除が必要です。
「VACUUM」をSQLITE実行

【VACUUM】とは?
一時データベースファイルにデータベースの内容をコピーし、そのコピーからオリジナルのデータベースを再ロードします。
これにより、開放されたページや継続されるアラインテーブルのデータ等が除去され、データベースファイルの構造が整理されます。(Version2.8.1以降から実装)

#————————————-
#■ 高速RDBを体感せよ! LEVEL6 ■ 【EXPLAINを使おう】
#————————————-
EXPLAINで予め一番早いSQLを選択しよう!
「EXPLAIN SELECT * FROM bbs_tbl WHERE id = 1;」をSQLITE実行

【EXPLAIN】とは?
SQL文は色々な記述が出来ますが、扱うデータの件数が多ければ多いほど、その記述方法でパフォーマンスが変わります。
EXPLAINコマンドは、そのパフォーマンスを視覚化してくれます。

#————————————-
#■ 高速RDBを体感せよ! LEVEL7 ■ 【synchronousを使おう】
#————————————-
利用するOSがWindowsの時は、PRAGMAコマンドを利用してsynchronousを変更してみましょう!
「PRAGMA default_synchronous = OFF」をSQLITE実行

【synchronous】とは?
default_synchronousの設定には3つのモードがあります。
『OFF』、『NORMAL』、『FULL』とあって、データ書込みの際のOSとのシンクロを制御しているようです。(デフォルトは『NORMAL』)。
『FULL』ならば、OSがクラッシュした時でもデータベースが壊れません、その代わりに速度が犠牲になります。
『OFF』の場合は、速度は向上しますがデータのハードディスクへの書き込みの際にOSがクラッシュすると、データベースが壊れやすくなります。

—The END—–

タグ :

コメント(0)

コメントを受け付けておりません。