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

mysql:4394

From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Tue, 2 Oct 2001 23:15:14 +0900
Subject: [mysql 04394] Re: インデックスについて

とみたです。

On Tue, 02 Oct 2001 10:18:43 +0900
Emiko Sano <emi@xxxxxxxxxx> wrote:

> すみません。SQL全文を載せると長いので省略してしまったのですが、
> Aテーブルでは別カラム(仮にb。これにもINDEXがはってあります。)にも条件を指定しています。
> explainでみると、
> Aテーブルではbカラムに張ったインデックスを見ています.
> BテーブルではIX_Bを使わず全件検索しています.
> 今の状態では、検索結果が返ってくるまでに3分ほどかかってしまいます.

LEFT() 関数を使用していますが、関数を使うとインデックスが使われない
のはしょうがないと思います。

一般的に、関数の結果がどのような文字列になるかは、関数を実行するまで
わからないので…。

> >> また、カラムの一部に対してインデックスを張った場合、
> >> どのようなSQL文をかけばそのインデックスを参照するのでしょうか?
> >
> >普通に書けば使われると思います。
> >	SELECT * FROM B WHERE aa = '1234';
> >とか。
> 
> それでは、
> B.aa='1234566789'等は引っかからないのではないでしょうか??

そですね。

> B.aaは実際には10〜20文字ほど入っています.その頭4文字が
> A.aと同じになっています.
> 普通に文字指定だけなら
> where B.aa like '1234%'
> でいいと思うのですが、別カラムとなると、
> where B.aa like concat(A.a,'%')
> とかにしないといけないのでしょうか?
> ちなみに上のように書いてもIX_Bは使われませんでした。

ん〜、関数を使うとやはりインデックスは使われないと思います。

aa の先頭4バイトだけにマッチングさせたいのなら、aa を先頭4バイトと
それ以降のフィールドに分割させるとか、先頭4バイトだけ抜き出して検索
専用のフィールドを新たに作るとかするのが良いと思います。

--
とみたまさひろ <tommy@xxxxxxxxxx>
日本MySQLユーザ会 http://www.mysql.gr.jp

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

      4379 2001-10-01 20:54 [Emiko Sano <emi@xxxx] インデックスについて                    
      4380 2001-10-02 00:00 ┗[とみたまさひろ <tomm]                                       
      4383 2001-10-02 02:17  ┣[fumi <fumihattori@xx] text 型の column を持っているテーブルのバックアップについて・・・
      4385 2001-10-02 02:23  ┃┗[fumi <wolfgang@xxxxx] すみません、以前の投稿したメールを手違いで送信してしまいました。
      4388 2001-10-02 10:18  ┗[Emiko Sano <emi@xxxx]                                     
      4389 2001-10-02 13:29   ┣[黒岩 <kuroiwa@xxxxxx] ODBC で int 型 select できず      
      4390 2001-10-02 13:58   ┃┗[<endo_t@xxxxxxxxxx> ]                                 
      4391 2001-10-02 14:15   ┃ ┗[黒岩 <kuroiwa@xxxxxx]                               
->    4394 2001-10-02 23:15   ┗[とみたまさひろ <tomm]                                   
      4424 2001-10-04 18:08    ┗[Emiko Sano <emi@xxxx]