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

mysql:3821

From: "MINOHATA Norio" <"MINOHATA Norio" <minohata@xxxxxxxxxx>>
Date: Mon, 25 Jun 2001 19:31:09 +0900
Subject: [mysql 03821] Re: or 条件で、 Index が使われない

> INDEX(公開日又は公表日,登録日)
> の複合インデックスでも効果ないでしょうか?

このインデックスは、公開日又は公表日が一意に決まっていて、
なおかつ(=AND)、登録日が一意に決まっているか範囲が定まっている場合に
威力を発揮しますので、元発言の方のようなOR条件では使用されません。

どうしてもインデックスを使用して
SELECT一発で済ませたいならば、

create table 公開書誌の日付 (
  ID      int,
  項目名  varchar(30),
  日付    date,
  index  XXX  (項目名, 日付)
);

というテーブルを作って、

ID  項目名           日付
----------------------------------
1   登録日           1999/01/01
1   公開日又は公表日 1999/06/01
2   登録日           1999/03/01
2   公開日又は公表日 1999/08/01
----------------------------------

という具合にデータを入れて、

select distinct ID from 公報書誌の日付 where
((項目名='公開日又は公表日')
 and (日付 >= '1998/05/01') and (日付 <= '1999/12/31'))
or
((項目名='登録日')
 and (日付 >= '1999/01/01') and (日付 <= '1999/12/31'))

という感じでSQLを実行すればよいと思います。
(試してませんが)

でも、こんなことするくらいならSELECTを2回にわけて実行して
アプリケーション側で何とかした方がいいかもしれません。
(どちらがいいかは用途によると思います)

# PostgreSQLではORでもインデックスが使用されるようになった
# とかいうのをだいぶ以前に(一年以上?)耳にしましたが...

--
箕畑典男
http://www.onmap.co.jp/
mailto:minohata@xxxxxxxxxx

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

      3815 2001-06-25 16:13 ["william" <william@x] or 条件で、 Index が使われない          
      3816 2001-06-25 17:58 ┣[Akihiko Shinohara <s]                                       
      3817 2001-06-25 18:39 ┃┗["william" <william@x]                                     
      3820 2001-06-25 19:08 ┃ ┗[Akihiko Shinohara <s]                                   
->    3821 2001-06-25 19:31 ┃  ┗["MINOHATA Norio" <mi]                                 
      3828 2001-06-26 10:31 ┃   ┗["william" <william@x]                               
      3833 2001-06-27 10:33 ┃    ┗["MINOHATA Norio" <mi]                             
      3834 2001-06-27 11:46 ┃     ┣["西田 玄" <nishida@x] MyODBC で UPDATE ができない
      3835 2001-06-27 12:53 ┃     ┃┣[Kengo Jinno <kengo@x]                         
      3837 2001-06-27 13:59 ┃     ┃┃┗["西田 玄" <nishida@x]                       
      3839 2001-06-27 16:33 ┃     ┃┃ ┗["william" <william@x]                     
      3840 2001-06-27 16:58 ┃     ┃┃  ┗["西田 玄" <nishida@x]                   
      3863 2001-06-29 12:01 ┃     ┃┃   ┗["西田 玄" <nishida@x]                 
      3836 2001-06-27 13:22 ┃     ┃┗[madara <madara@xxxxx]                         
      3838 2001-06-27 16:20 ┃     ┗[Hiroshi Takiguchi <t]                           
      3818 2001-06-25 18:41 ┣[Seiji Tateyama <tate]                                       
      3819 2001-06-25 19:00 ┃┣["william" <william@x]                                     
      3825 2001-06-26 06:47 ┃┗[とみたまさひろ <tomm]                                     
      3826 2001-06-26 09:36 ┃ ┗["MINOHATA Norio" <mi]                                   
      3822 2001-06-25 20:36 ┗[Hiroshi Takiguchi <t]