mysql:10706
From: mattun <mattun <mattun@xxxxxxxxxx>>
Date: Mon, 20 Dec 2004 18:27:17 +0900
Subject: [mysql 10706] Re: SELECTの速度が遅い
さっそくのお返事ありがとうございます、松丸です。 > explain select b.id, b.name from messages as a, users as b where > a.target=b.id and b.sid=53 and a.isread='f' group by b.id order > by b.id > > レコード件数にもよると思いますが、 > インデックスを使用せずにレコードを数万件なめる必要がある場合は > 当然時間がかかると思いますので、インデックスを使用するようにクエ > リーを書き換えればいいのではないかと思いますが…。外していたらご > めんなさい。 上記をやってみたところ、 +-------+--------+-----------------------+---------+--------- +----------+--------+----------------------------------------------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +-------+--------+-----------------------+---------+--------- +----------+--------+----------------------------------------------+ | a | ALL | messages_target_index | NULL | NULL | NULL | 751457 | Using where; Using temporary; Using filesort | | b | eq_ref | PRIMARY | PRIMARY | 4 | a.target | 1 | Using where | +-------+--------+-----------------------+---------+--------- +----------+--------+----------------------------------------------+ とでました。aのほうがインデックスを使ってない状態なのでしょうか? あるサーバーから違うサーバーにデータを移動した場合などには、インデックスは作りなおしたほうが良いのでしょうか? 移行前のサーバーでは、 select b.id, b.name from messages as a, users as b where a.target=b.id and b.sid=53 and a.isread='f' group by b.id order by b.id で、今よりははやく動いたようです。 > phpMyAdminを使っているということは、PHPでMySQLにアクセスしているわけで > すから、PHP側の問題でもMySQLの問題でもなく、松丸さんの書かれたプログラム > の問題だと思います。 > > #同じデータベースに同じSQLでリクエストしてるんですよね? そうですね、同じデーターベースにリクエストしています。 > Where句のみでの結合を行わずに、Form句でJOINを利用してみては > いかがでしょうか? > DB2, Oracleでは、この方法で速度を上げることができました。 select users.id,users.name from messages INNER JOIN users on target=users.id where users.sid = 53 and messages.isread='f' こんな感じでJOINしてみました。結果は、以前のクエリと同じになりましたが、時間はのびてしまい、約10秒かかってしまいました。 JOINの仕方が間違っているのでしょうか? 以上よろしくお願いいたします。 松丸頒泰 mattun@xxxxxxxxxx http://www.meganebu.com
-> 10706 2004-12-20 18:27 [mattun <mattun@xxxxx] Re: SELECTの速度が遅い 10707 2004-12-20 19:36 ┣[al-kamil <al-kamil@x] 10709 2004-12-21 10:44 ┗[Hideki SUNADA <hidek] 10711 2004-12-21 15:10 ┗[mattun <mattun@xxxxx]