- - PR -
MySQLのレコードの並び順について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-06-11 10:58
MySQLを利用してあるクエリーを発行したいのですが、
複数項目のorder byを使っている為、インデックスを利用 できない状態になってしまい、速度が極端に遅いです。 Explainで見ると、Using temporary; Using filesortが発生している 状態です。 よって、order byを外す。または1項目だけのorder byにクエリーを 修正しようと思っています。 そこで質問なのですが、order byを使わない場合に並び順はどんな順番で表示され ても構わないのですが、同じクエリーを何回発行(もちろんテーブルの更新がない と仮定して)しても同じ順番で表示されるものなのでしょうか? 具体的には1回目に登録昇順だったのが、2回目に登録降順(これはあり得なさそう ですが・・・)、3回目は完全ランダムだったりする事があり得るのかです。 とりあえず、何回か試した限りでは同じ順番で表示されてはいますが、 これが保障されているのかが知りたいです。(試した限りでは登録順で表示 されている様ですが、並び方の保障は必要ありません、欲しいのは何回実施 しても同じ順番で結果を返す保障です) ご存じの方がおりましたら、ご教授ねがいます。 | ||||
|
投稿日時: 2008-06-11 11:24
なんだか似たような質問をよく見かけるけど、集合論を見ればイメージしやすいんじゃないかな?
データの集合を取り出すだけで、本来、行の順番も列の順番も保証しないはず。 (だから、select * from〜じゃなくて、カラム名を指定すべし、というのはよく言われている。) | ||||
|
投稿日時: 2008-06-11 11:26
たぶんそんな保証(保障じゃなくて)はないんですが、そもそも、
MySQLのプランナって、ORDER BYがインデックスの利用可否に影響するものなのですか? | ||||
|
投稿日時: 2008-06-11 12:00
冬寂さん、カーニーさんご回答ありがとうございました。
保証はないと言う事ですね。ありがとうございました。
where句に対する処理でインデックスは使われていますが、 ORDER BYに対する処理で無駄なファイルソートが実行されてしまい、それを なんとかしたいと思った次第です。 http://dev.mysql.com/doc/refman/4.1/ja/order-by-optimisation.html | ||||
|
投稿日時: 2008-06-11 19:09
MySQLのバージョンは、4.1なのですか?
「order byに複数列を指定すると、インデクスによるソート抑止ができない」といった 制限はないと思いますが? 表定義、インデクス定義、検索のSQL(条件式、order by指定は省略しないで)を 示せませんか? |
1