重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

商品情報が入ったテーブルから、一致した件数を求めて、商品名を一覧表示するSQLなのですが、件数を求めるのに時間がかかります。もっと早くする方法はないでしょうか?

登録されているのは700万件ぐらいで、件数を表示させるのに2.5秒、商品名を出すのは0.3秒くらいです。
select `商品名` FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' LIMIT 0 , 30
これで検索結果を求めて、

select count(`商品名`) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%'
で一致した件数を求めています。
サーバのスペック
メモリ1GB
CPU2.66GHz

A 回答 (3件)

参考までに私の環境です



パソコン(テストのテストでまずは自分のパソコンで馬鹿なミスや無限ループなどないことを確認するため)
windows2000
ペンティアム4/1.7GHz
メモリ512M

テストサーバ
windows2000Server、turboLinux、redhat、freeBSD などなど
ペンティアム4/2GHz ~ Xeon等
メモリ1G~以上


テストサーバの中で
windows2000ServerのサーバとLinuxのサーバで
OS以外のスペックが同等なものがありますのでテストしてみたところ
5万レコードあるtableへ同じ検索をかけると

SELECT name
FROM `product`
WHERE name LIKE '%検索商品名%'

自分のパソコンで0.1630 秒
win2000Serverで 0.0237 秒
Linuxで 0.0090 秒

自分のパソコンは参考までのタイム
win2000ServerとLinuxではマシンスペックは同じであることを考えると
Linuxのほうが早いと言わざるを得ない結果が出ています
5万レコードでこの差ですから、700万レコードならば当然もっと差が出ることになると思います
    • good
    • 0
この回答へのお礼

ありがとうございます。
時間ができたらLinuxをインストールしてやってみようと思います。

お礼日時:2005/04/18 19:43

適切にINDEXを作成すれば早くなる可能性があります。



参考URL:http://dev.mysql.com/doc/mysql/ja/create-index.h …
    • good
    • 0
この回答へのお礼

いろいろ試してみましたが、変わりませんでした。

like %文字列%で検索する場合は早くなりませんよね?

お礼日時:2005/04/18 19:39

OSすらワカランのでなんともいえませんが、


開発段階のテストのさらにテスト用でwindowsだとしたら
700万件の情報をブンまわすのに、パソコンサーバ1台だけならそんな程度かそれ以上の時間はかかるんではないでしょうか?

SELECT count( * ) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%'
こっちもためしてみてください

この回答への補足

SELECT count( * ) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%'
でもやってみましたがほとんど時間は変わりませんでした。
OSはWindowsXPを使用しているのですが、Linuxなどではもっと早くなるのでしょうか?

補足日時:2005/04/17 16:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す