mysqlのMyISAM型でこういったデータの取得は適切なやり方でしょうか。
・件数は700前後
・インデックスは主キー以外に使っていません
・トランザクションや外部キーも使っていません
SELECT * FROM tabledate WHERE 100<a AND 200>a AND 300<b AND 1000>b AND c='てすと' AND d='テテテ' AND e='testtest' AND f='ttt' AND g IN('123','456','789','122','333','4566','888') AND h IN('666','777') AND ・・・ANDが10個続く・・・ ORDER BY year_manth_day DESC
コマンドプロンプトで実行すると結果は0.12secでした。
自分のパソコンの中だけで動かしているのですが、
この実行時間は充分でしょうか。
No.4ベストアンサー
- 回答日時:
ALLの意味はインデックスをつけないといけないということではなくて、オプティマイザがフルテーブルスキャンをしたほうが効率的と判断したということですね。
例えインデックスがあってもフルテーブルスキャンをしたほうが効率的と判断されれば使われません。
また、possible_keysは今回の条件で使えるインデックスがなかったよ、という意味です。(WHERE句で指定していて、レコードの大部分が絞りこめるような列にインデックスを貼って試してみましたか?)
それと、Extraにfilesortが出ていますが、検索よりもソートの負荷の方が高いかもですよ。ケースによってはORDERBYを外してプログラムで処理した方が速いケースもあります。
(今回の場合は件数が少ないので大した違いはないでしょうが。)
しかし、データが最大で数百件程度ならな、それほどムキになって現在の実行時間を短縮する意味もないような気がします。
(現在の時間が半分になったとしても体感ではわからないレベルでしょう)
No.3
- 回答日時:
#1です
上限がきまっていて、負荷テスト段階で満足しているなら
とくに気にする必要はないでしょう。
2回目、3回目はキャッシュされているでしょうからあまり意味がないです
(普通に考えて何度も同じ条件で検索をかけることはないでしょうから)
No.2
- 回答日時:
定石ですがとりあえず、EXPLAINコマンドでオプティマイザがどういう順序でSQLを発行しているのか実行計画を見てみましょう。
その上でマニュアル上に書いてあるポイントで最適化を施せばとりあえず基準となるパフォーマンスのデータがとれるかと思います。下記リンクの特に「SELECTクエリーの速度」や「WHERE 節最適化」、「クエリパフォーマンスの推定」などの章を読んでみてください。
その上でまだコストがかかるようであれば、そのコストの掛かる部分について対応策を考えるのがよいかと思います。
SELECTおよびその他のステートメントの最適化
http://dev.mysql.com/doc/refman/5.1-olh/ja/query …
また、MySQL 5.6.3からは「Optimizer Tracing」というオプティマイザがどのような判断をしたかということが、トレースできる機能があるようです。
(実際に使ったことはありませんが)
実際のところ500いくかどうかだと思います。いっても700までです。早ければ今のままでいいかも。なので、まずないですが、もしそれ以上になりパフォーマンスに問題が出ればそのときに対処すればいいかと思っていました。速ければ負荷に問題がないですか?
1回目は2 rows in set (0.09 sec)
2回目以降は2 rows in set (0.01 sec)
でした。
EXPLAIN EXTENDEDで見てみると
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
| 1 | SIMPLE | tabledate | ALL | NULL | NULL | NULL | NULL | 500 | Using where; Using filesort |
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
ALLはインデックスをつけないといけないといことみたいで、
possible_keysでインデックスを指定すべきフィールドが分かるそうですが、
NULLになってしまいます。
No.1
- 回答日時:
>SELECT *
してる時点で、スピードに文句を言ってはいけません。
個人的な感想ですが、700件のデータで0.12秒もかかっていては
データ件数が増えたら使い物にならないと思います。
適当なインデックスを貼り、インデックスに基づいたフィールドのみ
表示する必要がありそうです
実際のところ500いくかどうかだと思います。いっても700までです。早ければ今のままでいいかも。なので、まずないですが、もしそれ以上になりパフォーマンスに問題が出ればそのときに対処すればいいかと思っていました。速ければ負荷に問題がないですか?
1回目は2 rows in set (0.09 sec)
2回目以降は2 rows in set (0.01 sec)
でした。
EXPLAIN EXTENDEDで見てみると
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
| 1 | SIMPLE | tabledate | ALL | NULL | NULL | NULL | NULL | 500 | Using where; Using filesort |
+----+-------------+--------+------+---------------+------+---------+------+----
--+-----------------------------+
ALLはインデックスをつけないといけないといことみたいで、
possible_keysでインデックスを指定すべきフィールドが分かるそうですが、
NULLになってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- 英語 この英文は平易な反面格調高いですか? 1 2023/01/15 12:04
- 英語 和訳の手伝いをお願いします 2 2023/02/27 11:42
- 英語 Results: In total, 5,963 titles were identified wi 4 2022/12/29 21:29
- TOEFL・TOEIC・英語検定 With its architecture and gardens and a wealth of 0 2022/12/17 16:11
- 大学受験 英作文の添削をお願いしたいです。 2 2022/08/19 20:37
- 政治学 下記、パッと見て、メロディー浮かびますか? 1 2023/02/07 22:00
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- 英語 英語3 課題でこの英語の文章のSVOの分析や()等の括りを出されたため、できるだけ完璧にしたいのです 1 2022/12/18 02:25
- 英語 英文の添削をお願いします 4 2023/05/23 11:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このSQLあってますか?教えてく...
-
〜のような結果を出すためのSQL...
-
下記の問合せを行うクエリを、P...
-
#1062 - '0' は索引 'PRIMARY' ...
-
MySQLのテーブル作成でハイフン...
-
本を見ながらPHPを勉強している...
-
SQL任意に並び替えをしたい
-
日本の全市区町村を人口密度が...
-
書籍の内容はまともでしょうか?
-
PHPで「myql関数」が使用できな...
-
ここで「INSERT INTO」を使う意...
-
ここでは「サブクエリ」必要な...
-
MAMPで80ポートが使用されている...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。
-
SQLです!!教えてください。
-
SQLです。あってますか?↓
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DBの定義のサイズを大きくし過...
-
mySQL プライマリーキーのカラ...
-
SQL、oracleにて文字列操作(連...
-
(phpMyadminの)インデックスサ...
-
'PRIMARY KEY'と'UNIQUE()'の違...
-
インデックスキーを設定するとK...
-
連番を振る インデックス 付...
-
パフォーマンスとIN句とAND、実...
-
PHPのforeachでSQL文を処理して...
-
インデックスとは?オートナン...
-
データベースのインデックスに...
-
mysqlのインデックス
-
インデックスの一意な値の数に...
-
SQL Serverのntext型で一意イン...
-
INDIRECT関数の代替方法は?
-
テーブルの列数を調べたい
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
LIKEの右側にカラムを指定でき...
-
SQLServerでNULLを挿入したいです
おすすめ情報