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

mysql:2226

From: (moeru) <<moeru@xxxxxxxxxx>>
Date: Wed, 21 Jun 2000 18:12:41 +0900
Subject: [mysql 02226] プログラム効率とデータベースの処理スピード


2000/06/21 01:27:01 +0900にTamon <tamon@xxxxxxxxxx>さんに頂いた
「[mysql 02225] Re: SELECT 句で演算をした別名は WHERE 句では使えない?」への返事です。

モエルです。
tamonさん、こんにちは(^^)

エイリアス指定の件、
テストまでしていただいたようでありがとうございましたm(__)m

>> SELECT句が一番最後に処理されるため
>> SELECTのエイリアス指定は、それより先に処理されるWHERE句に反映しない。
>
>SELECTのエイリアス指定は主にgroup byで使います。
>なんで、たぶん違うと思います。
>ただ、へんなツッコミで申し訳ないけど、プログラム効率と
>データベースの処理スピードなんかを考えると、あまりいい方法
>じゃない気がします。
>あの方法だとインデックスは使われない気がするんですよね。
>なんで、UNIX_TIMESTAMPなんて固定だし、プログラム中で
>時間だして、86400足して、SQLのWHERE句は固定の数字にする
>方法がいいと思うのですが・・・

プログラム効率とデータベースの処理スピードという言葉に弱いです(^^;

まだ修行中の身なので、アドバイスくださいm(__)m


プログラムの内容は、残り時間を算出して
残り時間が1日以内のアイテムを全部表示させるものです。

終了時間は、endsです。

終了時刻 − 現在時刻 = 残り時間
残り時間 <= 86400


$result = mysql_query ("
SELECT itemid,title,cat_id,maincat,cat_name,date,ends - UNIX_TIMESTAMP() timeleft,
FROM item,category 
WHERE item.category = category.cat_id 
AND ends - UNIX_TIMESTAMP() < 86400 AND ends - UNIX_TIMESTAMP() > 0");

前から質問しようと思っていたのですが
すこし前のメーリングリストに、とみたさんが
MySQLは結合関係が弱いってコメントが気になっています。。

プログラム効率とデータベースの処理スピードを考えた場合
MySQLのSQL文は、テーブルを1つに絞った方が効率がいいのか
それとも、テーブルを結合してそれぞれのデータを抽出した方がいいのか?
どっちでしょう?
ものによっては、3つとか平気で結合しちゃってます(^^;

上記の場合、アイテムテーブルに入っているカテゴリー番号から
カテゴリーテーブルのカテゴリー名を抽出するためにテーブルを結合しています。
これは、テーブルを結合しない処理をした方が速いですか?

*結合される側(category)のテーブルのデーター数は
 大抵2〜300以下です。


それから、残り時間を算出するところですが
インデックスを使うようにするにはどうしたらいいかがわかりません。

明示的にインデックスを使うようにするって方法自体が分かりません。
どういうときにINDEXを使っているのか?ってことです。

インデックスを使うようにするには、
SELECTかWHEREのところで、
インデックスに指定しているフィールド名を書けば使われるということでしょうか?

今まで、SQL文にINDEXを指定したフィールドが登場すれば
必然的に使われるとばかり思っていたのです(^^;


テーブルは、以下のようになっています。

CREATE TABLE item (
	itemid INT(20) NOT NULL AUTO_INCREMENT,
	userid INT NOT NULL,
	date VARCHAR(12) NOT NULL,
	title VARCHAR(80) NOT NULL,
	category INT(11),
	ends VARCHAR(12) NOT NULL,
	...
	PRIMARY KEY (itemid),
	INDEX (userid),
	INDEX (title),
	INDEX (date),
	INDEX (ends)
);


どうぞ宜しくお願いしますm(__)m



モエル

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

      2219 2000-06-19 23:37 [<moeru@xxxxxxxxxx>  ] SELECT 句で演算をした別名は WHERE 句では使えない?
      2220 2000-06-20 01:24 ┣["Ningfeng Yang" <yan]                                       
      2221 2000-06-20 05:39 ┗[Tamon <tamon@xxxxxxx]                                       
      2224 2000-06-20 18:51  ┗[<moeru@xxxxxxxxxx>  ]                                     
      2225 2000-06-21 01:27   ┗[Tamon <tamon@xxxxxxx]                                   
->    2226 2000-06-21 18:12    ┗[<moeru@xxxxxxxxxx>  ] プログラム効率とデータベースの処理スピード
      2227 2000-06-21 23:39     ┗[とみたまさひろ <tomm]                               
      2228 2000-06-22 17:08      ┗[<moeru@xxxxxxxxxx>  ]