
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
単一グループのグループ関数で...
-
SELECT FOR UPDATE で該当レコ...
-
where句中のtrim関数について
-
トランザクションログを出力せ...
-
データ
-
AccessのSQL文で1件のみヒット...
-
【PL/SQL】FROM区に変数を使う方法
-
フラグがたっているデータがあ...
-
BLOB型項目をSQLの検索条件に指...
-
デフォルトでデータが表示され...
-
SQL*Loader Append
-
SQLのSelect Countについて
-
osqleditについて
-
phpmyadminでワイルドカードを...
-
DISTINCTについて
-
引数によってwhere句を切り替え...
-
PL/SQL内の共通関数の引数にフ...
-
group byの並び順を変えるだけ...
-
DATAPUMPとFASTUNLOADでのデー...
-
アクセスのレポートでレコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
group byの並び順を変えるだけ...
-
where句中のtrim関数について
-
【PL/SQL】FROM区に変数を使う方法
-
トランザクションログを出力せ...
-
SELECT FOR UPDATE で該当レコ...
-
引数によってwhere句を切り替え...
-
データ
-
SQL*Loader Append
-
AccessのSQL文で1件のみヒット...
-
updateで複数行更新したい
-
アクセスのレポートでレコード...
-
「数字で始まらない」ものを抽...
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
osqleditについて
-
PL/SQL内の共通関数の引数にフ...
-
1レコード全てを改行なしで表...
-
トリガからプロシージャのコー...
-
BLOB型項目をSQLの検索条件に指...
おすすめ情報