[前][次][番号順一覧][スレッド一覧]

mysql:9474

From: OHTSUKA Ko-hei <OHTSUKA Ko-hei <techml@xxxxxxxxxx>>
Date: Sun, 30 May 2004 09:25:08 +0900
Subject: [mysql 09474] ある値の最も近い周辺値を抜き出す場合、インデックスは使われる?

大塚です。
お世話になります。

あるテーブルfooのあるフィールドhogeにインデックスを張っている
としまして、その中である値(例えば200)と比較してもっとも近い値を
10抜き出す、等とした場合、これまで何気なく

SELECT hoge FROM foo ORDER BY ABS(200 - hoge) LIMIT 10;

的な感じでやってたんですが、もしかしてこれだとインデックス
使われなくて全件参照して比較計算されてしまうんでしょうか。
(というかExplainSQLで使われない事自体は確認したのですが)

ABS計算なんて、インデックスがあるなら200の値を中心に上下に
近い順に計算してやって、10を超えれば計算を止めて結果を出せば
いいと人間的には思うので、DBにもそういう賢さを求めてたのです
が、無理な相談なのでしょうか。

こういう感じの「ある値から近い物」を抜き出す場合、インデッ
クスを有効に活用して処理するには、「ある値」からの適当な
レンジを設けて抜き出し後(例)、

SELECT hoge FROM foo WHERE hoge >190 AND hoge < 210
  ORDER BY ABS(200 - hoge) LIMIT 10;

抜き出された数が希望する10個より少なければ、レンジを広げて
再度抜き出す、という事を繰り返すしかないのでしょうか。

よくある話かなとも思うので、定石、あるいはその情報へのポイ
ンタを教えていただければ幸いです。

よろしくお願いいたします。

*********************************************************
       @北緯35°36′47 東経139°42′06 JGD2000
 大塚 恒平 OHTSUKA Ko-hei <<nene@xxxxxxxxxx>>
 i-mode・EZWEB・vodafone Live!・Air H" Phone多分対応(汗)
  位置情報総合サイト「ここギコ!」http://kokogiko.net/


[前][次][番号順一覧][スレッド一覧]

->    9474 2004-05-30 09:25 [OHTSUKA Ko-hei <tech] ある値の最も近い周辺値を抜き出す場合、インデックスは使われる?
      9475 2004-05-30 10:39 ┣[OHTSUKA Ko-hei <tech]                                       
      9476 2004-05-30 11:33 ┗[ML account <ml@xxxxx]                                       
      9477 2004-05-30 11:53  ┗[OHTSUKA Ko-hei <tech]                                     
      9478 2004-05-30 13:35   ┗[ML account <ml@xxxxx]                                   
      9481 2004-05-31 12:15    ┗[OHTSUKA Ko-hei <tech]