Skip to content

ベンチマーク

110万件のWikipedia記事(英語100万件 + 日本語10万件、平均666文字)で MySQL 8.4 FULLTEXT(ngram パーサー)と比較。MygramDB v1.5.0、verify_text: all、クエリキャッシュ無効。すべての数値は10回計測のp50。

再現可能

リポジトリmake bench-up && make bench-run を実行すると同じベンチマークを実行できます。

ハードウェアについて

Apple M4 Max(128GB ユニファイドメモリ)で計測。ユニファイドメモリは一般的なサーバー用 DDR4/DDR5 より帯域が広いため、サーバー環境では両エンジンとも絶対値で遅くなりますが、相対的な性能差は同程度です。

検索レイテンシ(SORT id LIMIT 100)

検索レイテンシ(p50、対数スケール)

クエリタイプマッチ数MySQLMygramDB高速化
複合語 ("quantum physics")1042,566ms0.09ms27,600倍
中頻度 ("quantum")1,9611,874ms0.28ms6,700倍
低頻度 ("algorithm")2,498507ms0.42ms1,200倍
希少語 ("fibonacci")84936ms0.08ms11,600倍

CJK検索レイテンシ(SORT id LIMIT 100)

CJK検索レイテンシ(p50、対数スケール)

クエリマッチ数MySQLMygramDB高速化
日本32,2821,204ms1.1ms1,100倍
東京6,989300ms3.9ms77倍
科学1,5514.2ms2.2ms1.9倍

COUNT性能

COUNTレイテンシ(p50、対数スケール)

クエリタイプカウントMySQLMygramDB高速化
中頻度 ("quantum")1,9611,797ms0.08ms21,600倍
低頻度 ("algorithm")2,498416ms0.08ms5,500倍

結果一致性(v1.5.0)

verify_text: all を有効にすると、MygramDB は MySQL FULLTEXT と完全一致の結果を返します:

クエリMySQLMygramDB一致
quantum1,9611,961完全一致
algorithm2,4982,498完全一致
日本32,28232,282完全一致
科学1,5511,551完全一致

verify_text なしの場合、n-gram インデックスは偽陽性を含む場合があります(例: "quantum" で 1,961件ではなく 58,214件がヒット)。これは n-gram トークン化の特性であり、想定される動作です。

並列スループット

スループット — QPS(高いほど良い)

クエリ: "algorithm"、レベルあたり10秒。

接続数MySQL QPSMygramDB QPSMySQL p50MygramDB p50
122,634470ms0.35ms
4811,766495ms0.32ms

メモリ使用量

ドキュメント数インデックスドキュメント+テキストRSS合計100万件あたり
1,100,000813MB1.54GB2.53GB約2.3GB

verify_text モード

  • off(デフォルト): メモリ使用量が少ないが、n-gram 偽陽性を含む場合あり
  • all: ドキュメントテキストを保持してポストフィルタ検証。110万件で約1.5GB 追加だが結果は正確

なぜこの性能が出るのか

アーキテクチャの違いについてはMySQL FULLTEXTが遅い理由を、Elasticsearchとの比較は比較ページをご覧ください。