下記のようなテーブルのインデックスはどう作成するのが最も速いでしょうか。
startとendの範囲からhogeを取得するのが目的で800万レコードほどです。
innodb +----------+----------+--------+ | start | end | hoge | +----------+----------+--------+ | 10000 | 11000 | test | | 11001 | 13000 | sample | | 15000 | 16000 | dummy | +----------+----------+--------+ +----------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------+------+-----+---------+-------+ | start | decimal(10,0) | NO | | NULL | | | end | decimal(10,0) | NO | | NULL | | | hoge | varchar(128) | NO | | NULL | | +----------+---------------+------+-----+---------+-------+
sql
1SELECT * FROM sample WHERE end >= 12345 AND start <= 12345 2 3# => sample
EXPLAINを使い、いろいろ試したのですが、
だいたい以下のようなスコアでした。
インデックスなし・・・10s
startにPRIMARY・・・5s
start、end複合INDEX・・・5s
endにINDEX・・・2s
2s以上あがらないのはスペックや設定の問題でしょうか。
(innodbバッファプールなどは初期設定だったかと思います。
アドバイスいただけますでしょうか。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。