MYSQLにて、データ検索を行っております。
A番目のレコードからB個飛ばしで360個のデータを抽出したいのですが、
なかなか速くて良い方法が見つかりません。
例えば、5番目,8番目,11番目・・・と言う風に
最初とインターバルが決まっています。
今、試してみたものが、FOR文で"何番目のレコード"という値を360個取得し、
INを使って検索しています。
しかし、この方法だと、平均1SEC,最悪インターバルの代わった後だと3SEC
掛かってしまいます。
目標は、0.1SEC。とにかく速ければ速いほど良いと言うことなのですが・・・
何か良い方法・ヒントなどありましたら、ご教授下さい。
宜しくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
MySQLには詳しくないので以下DBMS一般の話になりますが,たぶん,無理です。
ハードディスクのシークは,民生用だと現在最も高速なものでもサブ10ミリ秒がやっとだと思います。仮にシーク速度を10ミリ秒とすると,360個のデータにアクセスするにはシークだけで0.36秒かかります。読み出しその他の処理を加えて1~3秒というのは妥当な値だと思います。
これ以上の高速化を目指すなら,考えられるのは,
・ディスクアクセスを減らす
→キャッシュサイズを大きくとる
・シークを減らす
→データを(インターバル間隔で)連続配置する
→データ番号をインターバルで割った余りを格納するカラムを追加し,そこにインデックスを張る
(この方法が有効に機能するのは,インターバルが変化しないときのみ。インターバルを複数用いる場合も,ある程度の高速化は期待できるでしょうが,シークは削減できないので効果は限定的になるでしょう。またカラムが増えるのでストレージコストは増加しますし,更新コストも大きくなります)
くらいでしょう。
あるいは(この処理の目的がわからないので適当な答ではないかもしれませんが)データの更新があまり頻繁でなく,参照速度が重要なのであれば,私なら,予め答を計算したものを格納しておいて,それにアクセスするという方式を取ります。更新があった場合は再計算が必要なので更新コストは極めて高くなりますが,参照速度は速くなります。
No.1
- 回答日時:
初期値=f、間隔=i、個数=c、レコード番号=r とおくと、
mod(r-f,i)=0・・・(レコード番号-初期値)が間隔で割り切れる
かつ
(r-f)/i<c ・・・(レコード番号-初期値)/間隔が個数未満
かつ
r≧f ・・・レコード番号≧初期値
という条件でどうでしょう。
SQLはよく知らないので、レコード番号なんてものが使えるのかはわかりませんが。
早速のご回答有り難うございます。
似たような形のものを試してみましたが、
レコード1つ1つに対して計算を行うようで、
少し時間が掛かってしまいます。
全レコード数は2万件です。
実際は20万件程度になると考えております。
計算をせずにまとめて一気に取れる方法など
ありませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスのレポートでレコード...
-
SQLで条件にヒットしたレコード...
-
SQL*Loader Append
-
ACCESS レコードの並び順について
-
PL/SQL内の共通関数の引数にフ...
-
「数字で始まらない」ものを抽...
-
【PL/SQL】FROM区に変数を使う方法
-
VBAでDBから取得したデータを突...
-
続・トリガーの起動条件につい...
-
並べ替えについて
-
配列に指定した値が含まれてい...
-
エクセルのソートについて
-
1の行を固定した上でVBAを用い...
-
ファイルメーカーでソート後の...
-
mysql accessでの操作について
-
2回実行のSQL文を1回にしたい
-
日本語で、likeを使うと値が正...
-
MySQLでカタカナでの並び替えが...
-
ファイルの漢数字の順番につい...
-
Oracle でのSQL文について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【PL/SQL】FROM区に変数を使う方法
-
単一グループのグループ関数で...
-
group byの並び順を変えるだけ...
-
SQL*Loader Append
-
SELECT FOR UPDATE で該当レコ...
-
where句中のtrim関数について
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
「数字で始まらない」ものを抽...
-
トランザクションログを出力せ...
-
引数によってwhere句を切り替え...
-
データ
-
BLOB型項目をSQLの検索条件に指...
-
SQLで条件にヒットしたレコード...
-
1レコード全てを改行なしで表...
-
ACCESS レコードの並び順について
-
大量レコードをTRUNCATEせずに...
-
レコードの更新履歴について
-
PL/SQL内の共通関数の引数にフ...
-
トリガからプロシージャのコー...
おすすめ情報