
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で質問しましょう!
似たような質問が見つかりました
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- その他(開発・運用・管理) MacのPCでわファイルを検索したくて、右上の虫眼鏡で検索をかけますが、EPSデータが何故か検索デー 2 2022/10/25 10:29
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Excel(エクセル) EXCELで参照したデータを検索したい。 2 2023/01/18 13:32
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excel 行の"〇" を検索して見出し(日付)を表示させたい 1 2022/04/04 18:35
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
where句中のtrim関数について
-
SELECT FOR UPDATE で該当レコ...
-
【PL/SQL】FROM区に変数を使う方法
-
group byの並び順を変えるだけ...
-
単一グループのグループ関数で...
-
データ
-
osqleditについて
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
トランザクションログを出力せ...
-
引数によってwhere句を切り替え...
-
AccessのSQL文で1件のみヒット...
-
Oracle10gからkeySQLで集計データ
-
Oracleですがsqlで質問です。 ...
-
oracle DB内のデータを増幅す...
-
ACCESS レコードの並び順について
-
PL/SQL内の共通関数の引数にフ...
-
アクセスのレポートでレコード...
-
飛び飛びデータ検索
-
SQL*Loader Append
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
【PL/SQL】FROM区に変数を使う方法
-
group byの並び順を変えるだけ...
-
SELECT FOR UPDATE で該当レコ...
-
トランザクションログを出力せ...
-
where句中のtrim関数について
-
SQL*Loader Append
-
データ
-
AccessのSQL文で1件のみヒット...
-
引数によってwhere句を切り替え...
-
アクセスのレポートでレコード...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
BLOB型項目をSQLの検索条件に指...
-
PL/SQL内の共通関数の引数にフ...
-
1レコード全てを改行なしで表...
-
ACCESS レコードの並び順について
-
updateで複数行更新したい
おすすめ情報