- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (19)
- Development
- Business
はじめに
初めまして!今年(2025年)の6月に入社した片岡です。
業務で初めてSolrを触る機会がありました。
「SQLよりどのくらい速いのか!?」という素朴な疑問から、入門編としてまずはシンプルな条件で比較をしてみました。
特に全文検索ってSQLのLIKE句だけだとどうしても遅くなったり、精度が微妙だったりしますよね。
そこで今回は、全文検索に特化した検索エンジンSolrと、普段よく使うSQL(ActiveRecord)を使って、実際にどれくらい速度差があるのか簡単にベンチマークを取ってみました!
Solrとは?
Solr(ソーラー)はApacheが開発しているオープンソースの全文検索プラットフォームです。
特徴としては:
・大量のデータに対して高速に全文検索できる
・形態素解析や表記ゆれへの対応が可能
・スコアリングやファセット検索など、柔軟な検索機能が豊富
Railsとの連携にはsunspotやrsolrなどのgemを使うことで、ActiveRecordのモデルに検索機能を簡単に組み込めます。
簡単なイメージで言えば「SQLでは限界がある検索を、もっと速く・柔軟にできる専用の検索サーバー」です!
Round1: 【全文検索】速度比較
目的
MySQLのFULLTEXT検索とSolrで、できる限り条件(クエリ・返却件数)を揃えて全文検索を実行し、速度の違いを比較すること。
本当はよく使われる LIKE '%keyword%' でも試したかったのですが、これはインデックスが効かず不公平になるため、今回は FULLTEXT検索 を採用しました。
入門編として、まずはシンプルに「キーワード検索」での違いを確認してみましょう!
前提
- データ件数:約3万件(うちヒット20件想定の英字キーワードを投入)
- MySQL:
bodyに FULLTEXT INDEX を作成済み
揃えた条件
- キーワード:
SuperUniqueKeyword2025 - 返却件数:
row = 20 - 返却フィールド:IDのみ
- SQL:
.pluck(:id)(ARオブジェクト化を避ける) - Solr:
fl = id+.hits.primary_key(DB再読込しない)
コード(抜粋)
row = 20
query = 'SuperUniqueKeyword2025'# SQL(FULLTEXTでIDのみ)
sql_results = RoundOne
.where("MATCH(body) AGAINST (?)", query)
.limit(row)
.pluck(:id)# Solr(qf=bodyでIDのみ)
RoundOne.search do
adjust_solr_params do |p|
p[:qf] = 'body'
p[:fl] = 'id'
p[:rows] = row
end
fulltext(query) { fields(:body) }
end
solr_results = search.hits.map { |h| h.primary_key.to_i }結果
※実行時間は各クエリを3回実行し、平均値で算出
チェックポイント
- SQL は
EXPLAINを実行して FULLTEXT インデックスが効いていることを確認済み - Solr は
.resultsではなく.hitsを利用し、DB再読み込みを避けて純粋に検索結果のみを比較 - よく使うLIKE検索(%keyword%) はインデックスが効かず不公平になるため利用しない
Round2:【最新50件取得(created_at降順)】速度比較
目的
SQLとSolrで、単純な「最新のN件を取得する処理」の速度差を比較する。
前提
- データ件数:約3万件
- MySQL:
created_atにインデックスを作成済み
揃えた条件
- 返却件数:
row = 50 - 返却フィールド:IDのみ
- SQL:
.pluck(:id)(ARオブジェクト化を避ける) - Solr:
fl = id+.hits.primary_key(DB再読込しない)
コード(抜粋)
row = 50# SQL(created_at降順・IDのみ)
sql_results = RoundTwo
.order(created_at: :desc)
.limit(row)
.pluck(:id)# Solr(全件対象+created_at降順・IDのみ)
search = RoundTwo.search do
adjust_solr_params do |p|
p[:q] = '*:*'
p[:fl] = 'id'
p[:rows] = row
p[:sort] = 'created_at desc'
end
solr_results = search.hits.map { |h| h.primary_key.to_i }
end結果
※実行時間は各クエリを3回実行し、平均値で算出
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/52914
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
フリーランスエンジニア大募集中!
現在、「WEBエンジニア」「フロントエンジニア」「データサイエンティスト」など、様々な職種のフリーランスエンジニア様を募集中です。まずは以下よりお気軽にご応募ください!
採用ページはこちら:https://itanken.com/register
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/