- PR -

MySQLのレコードの並び順について

1
投稿者投稿内容
coogon
常連さん
会議室デビュー日: 2004/07/09
投稿数: 27
投稿日時: 2008-06-11 10:58
MySQLを利用してあるクエリーを発行したいのですが、
複数項目のorder byを使っている為、インデックスを利用
できない状態になってしまい、速度が極端に遅いです。
Explainで見ると、Using temporary; Using filesortが発生している
状態です。

よって、order byを外す。または1項目だけのorder byにクエリーを
修正しようと思っています。

そこで質問なのですが、order byを使わない場合に並び順はどんな順番で表示され
ても構わないのですが、同じクエリーを何回発行(もちろんテーブルの更新がない
と仮定して)しても同じ順番で表示されるものなのでしょうか?
具体的には1回目に登録昇順だったのが、2回目に登録降順(これはあり得なさそう
ですが・・・)、3回目は完全ランダムだったりする事があり得るのかです。

とりあえず、何回か試した限りでは同じ順番で表示されてはいますが、
これが保障されているのかが知りたいです。(試した限りでは登録順で表示
されている様ですが、並び方の保障は必要ありません、欲しいのは何回実施
しても同じ順番で結果を返す保障です)

ご存じの方がおりましたら、ご教授ねがいます。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2008-06-11 11:24
なんだか似たような質問をよく見かけるけど、集合論を見ればイメージしやすいんじゃないかな?
データの集合を取り出すだけで、本来、行の順番も列の順番も保証しないはず。
(だから、select * from〜じゃなくて、カラム名を指定すべし、というのはよく言われている。)
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-06-11 11:26
たぶんそんな保証(保障じゃなくて)はないんですが、そもそも、

引用:

coogonさんの書き込み (2008-06-11 10:58) より:
MySQLを利用してあるクエリーを発行したいのですが、
複数項目のorder byを使っている為、インデックスを利用
できない状態になってしまい、速度が極端に遅いです。



MySQLのプランナって、ORDER BYがインデックスの利用可否に影響するものなのですか?
coogon
常連さん
会議室デビュー日: 2004/07/09
投稿数: 27
投稿日時: 2008-06-11 12:00
冬寂さん、カーニーさんご回答ありがとうございました。

保証はないと言う事ですね。ありがとうございました。


引用:

MySQLのプランナって、ORDER BYがインデックスの利用可否に影響するものなのですか?



where句に対する処理でインデックスは使われていますが、
ORDER BYに対する処理で無駄なファイルソートが実行されてしまい、それを
なんとかしたいと思った次第です。

http://dev.mysql.com/doc/refman/4.1/ja/order-by-optimisation.html
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-06-11 19:09
MySQLのバージョンは、4.1なのですか?

引用:

複数項目のorder byを使っている為、インデックスを利用
できない状態になってしまい、速度が極端に遅いです。
Explainで見ると、Using temporary; Using filesortが発生している
状態です。

よって、order byを外す。または1項目だけのorder byにクエリーを
修正しようと思っています。



「order byに複数列を指定すると、インデクスによるソート抑止ができない」といった
制限はないと思いますが?

表定義、インデクス定義、検索のSQL(条件式、order by指定は省略しないで)を
示せませんか?
1

スキルアップ/キャリアアップ(JOB@IT)