mysql:3828
From: "william" <"william" <william@xxxxxxxxxx>>
Date: Tue, 26 Jun 2001 10:31:04 +0900
Subject: [mysql 03828] Re: or 条件で、 Index が使われない
吉です。 どの項目がORで、何個くるかは不定なので、 どちかというと、MINOHATA様の提案が魅力的だと思います。 実はそれも聞きたいところです。^^; また特許のデータベースを例とします。 公報の書誌事項の項目は20個ほどあります。 ID 項目名 値 ---------------------------------- 1 登録日 1999/01/01 1 公開日又は公表日 1999/06/01 1 キーワード xxxx 1 キーワード yyyy ..... ---------------------------------- などなど、1件の公報につき、20個ほどのレコードが出来ます。 すると、このテーブルは楽に1億を超えるレコード数になります。 MySQLって大丈夫? ----- william@xxxxxxxxxx ----- Original Message ----- From: "MINOHATA Norio" <minohata@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Monday, June 25, 2001 7:31 PM 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]