人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MYSQLのIN演算子に関する質問です。
インデックスを作成済みのテーブルに対して、多数のIN演算子を利用したクエリーを作成しようと考えています。

SELECT * FROM test WHERE id IN (1,5,10, .... ,9999);

といった形で、多数(500個程度を想定に)のIDを指定する予定です。

お聞きしたい点は、
・クエリーの応答速度は大きく劣化するのでしょうか?
・サーバー機器に求められる要件
・Mysqlの設定上で考慮する点

等々です。
テストデータを投入し、自分で検証してみろ!
という話は重々承知しておりますが、何分機器購入前でしたのでご質問させて頂きました。

知識等お持ちの方がいらっしゃれば、ご意見・アドバイスお願いします。

●質問者: lg-tsp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL SELECT test アドバイス インデックス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● nkanai
●35ポイント ベストアンサー

パフォーマンスの問題云々よりも、IN演算子で500個の値を指定するのは

あまり良いとは思えません。

(デバッグの際に非常に困難になると思います。)

それよりも、Ver.4.1以降でしたらIN演算子の中にサブクエリが使えますので、

テンポラリテーブルをつくり、そこにその500個の値を投入し、

そのテンポラリテーブルから参照するようにSQLを書いたほうがいいと思います。

(デバッグの時にもそのテンポラリテーブルが使えますので、比較的楽だと思います)

例) テンポラリテーブルをtbl_tmpとします。

SELECT * FROM test WHERE id IN (SELECT id FROM tbl_tmp);

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.1.2 比較演算子

◎質問者からの返答

ご回答ありがとうございます。

おっしゃるとおり設計がアホなのは存じております。

ただ、テンポラリテーブルを作成するにも、対象となる影響が多すぎて困っており、駄作としてこのような手を考えたし次第です。


2 ● KUROX
●35ポイント

回答1のやり方が妥当じゃないでしょうか?

http://blog.luckyboy.jp/2007/03/mysql.html

---------

予想では、今回の場合は、IN句でもインデックスが使われると思うので、

「応答速度は大きく劣化」するとは思えません。

◎質問者からの返答

ご回答ありがとうございます。やはりテンポラリテーブルが妥当なのですね。

インデックスが使われる/使われないが気になってきたので、やはり検証を実施してみることにしました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ