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

mysql:1568

From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Sat, 12 Feb 2000 01:45:39 +0900
Subject: [mysql 01568] Re: SELECT 文の実行結果が遅い理由を調べるには

とみたです。

At Sat, 12 Feb 2000 00:46:49 +0900,
Isamu Narimatsu <isamu@xxxxxxxxxx> wrote:

> SELECT文を実行したのですが、速度が極端に遅いと感じています。
> 
> 理由として考えているのは以下の通りです。

私は 3 だと思います。

> 1.INDEXキーを設定していない。
> Primary Keyとして設定しているカラムはあるが、それ以外にINDEXキーを設定してい
> ないカラムがある。
> (現在は一つもINDEXキーを設定していない。)

クエリの書き方によっては INDEX が使われないこともあります。explain で、
INDEX が有効かどうかある程度はわかると思います。

> 3.あいまい検索の方法が望ましくない。
> Like 演算子を使用して、複数のテーブルから該当する項目を選んで抽出するように
> しているが、その方法が適正でない。
> 全文検索の要領で、
> 
> LIKE concat(テーブルA.カラムB,テーブルC.カラムD,.........)='%KEYWORD%'

これが問題だと思います。1レコード毎に concat と like 演算をしないといけ
ないというのはかなりの負荷だと思います。他に条件が指定されてなければ、テー
ブル上のすべてのレコードについてこの処理が行なわれてしまいます。A.B,
C.D 等が INDEX であっても多分使われてないです。

素直に A.B='KEYWORD' or C.D='KEYWORD' or ... と書いた方が速いと思います。
この場合 A.B, C.D 等が INDEX になってれば、ちゃんと INDEX が使われるはず
ですし。

> みなさんはどのようなツールや方法を使い問題解決にあたられていますか?
> 参考までに教えて頂けるとうれしいのですが...

私はとりあえず select 文を explain してみます。

-- 
とみたまさひろ <tommy@xxxxxxxxxx>

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

      1567 2000-02-12 00:46 ["Isamu Narimatsu" <i] SELECT 文の実行結果が遅い理由を調べるには
->    1568 2000-02-12 01:45 ┗[とみたまさひろ <tomm]