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]