• ベストアンサー

検索結果の件数表示

商品情報が入ったテーブルから、一致した件数を求めて、商品名を一覧表示するSQLなのですが、件数を求めるのに時間がかかります。もっと早くする方法はないでしょうか? 登録されているのは700万件ぐらいで、件数を表示させるのに2.5秒、商品名を出すのは0.3秒くらいです。 select `商品名` FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' LIMIT 0 , 30 これで検索結果を求めて、 select count(`商品名`) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' で一致した件数を求めています。 サーバのスペック メモリ1GB CPU2.66GHz

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.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万レコードならば当然もっと差が出ることになると思います

nanasi
質問者

お礼

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

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

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

参考URL:
http://dev.mysql.com/doc/mysql/ja/create-index.html
nanasi
質問者

お礼

いろいろ試してみましたが、変わりませんでした。 like %文字列%で検索する場合は早くなりませんよね?

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

OSすらワカランのでなんともいえませんが、 開発段階のテストのさらにテスト用でwindowsだとしたら 700万件の情報をブンまわすのに、パソコンサーバ1台だけならそんな程度かそれ以上の時間はかかるんではないでしょうか? SELECT count( * ) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' こっちもためしてみてください

nanasi
質問者

補足

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

関連するQ&A