null+****@clear*****
null+****@clear*****
2010年 10月 26日 (火) 15:05:06 JST
Tetsuro IKEDA 2010-10-26 06:05:06 +0000 (Tue, 26 Oct 2010) New Revision: f416d158971096389b8bc9cb596676fef5f7e988 Log: added decription of "count skip" to userguide document. Modified files: doc/ja/source/userguide.rst Modified: doc/ja/source/userguide.rst (+25 -1) =================================================================== --- doc/ja/source/userguide.rst 2010-10-26 05:11:15 +0000 (c0be665) +++ doc/ja/source/userguide.rst 2010-10-26 06:05:06 +0000 (d292c46) @@ -107,7 +107,31 @@ groongaでは各カラムごとにファイルを分けてデータを格納す SELECT c1, c2, c11 FROM t1 WHERE c2 = XX AND c12 = "XXX"; -このケースではc1,c2,c11,c12に対してのみアクセスが行われることになります。 +このケースではc1,c2,c11,c12に対してのみアクセスが行われ、SQL文が高速に処理されることになります。 行カウント高速化 ---------------------------- + +COUNT(*)などの行カウントを行う場合と通常のSELECTによるデータ参照を行う場合に対して、従来よりMySQLではストレージエンジンの呼び出しを行う部分(=ストレージエンジンインタフェース)における区別が存在していないため、行数をカウントするだけで良いような場合にもレコードアクセス(SELECTの結果には含まれないデータへのアクセス)が行われる問題があります。 + +groongaストレージエンジンの前身であるTritonn(MySQL+Senna)ではこの問題に対して"2indパッチ"という不要なレコードアクセスを省略する仕組みを独自に実装してこの性能問題を回避していました。 + +これに引き続き、groongaストレージエンジンでも行カウントを高速化するための仕組みを実装しています。 + +例えば以下のSELECT文では不要なカラムデータの読み取りは省略され、必要最小限のコストで行カウントの結果を返すことができます。 :: + + SELECT COUNT(*) FROM t1 WHERE MATCH(c2) AGAINST("hoge"); + +行カウント高速化の処理が行われたかどうかはステータス変数で確認することもできます。:: + + mysql> show status like 'groonga_count_skip'; + +--------------------+-------+ + | Variable_name | Value | + +--------------------+-------+ + | groonga_count_skip | 1 | + +--------------------+-------+ + 1 row in set (0.00 sec) + +行カウント高速化の処理が行われる度に ``groonga_count_skip`` ステータス変数がインクリメントされます。 + +備考:この高速化機能はインデックスを用いて実装されています。テーブルスキャンが行われるパタンでは高速化は行われません。