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]