スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
タグ :

MySQLを使って分かったこと

 2008-11-15
MySQL(ver5)をDBで使用していますが、使っていて分かったことがあります。
それは、条件で使用する順番と、返答順番は一致しないということです。
どういうことかというと、以下のSQLを実行すると

select id,link from movie where id in('101341','101342','101343','101345','101344','101346','101376')

101341・・・
101342・・・
101343・・・
101344・・・
101345・・・
101346・・・
101376・・・



idの順番で返ってきます。
条件は
where id in('101341','101342','101343','101345','101344','101346','101376')
として、341,342,345,344,346,376と順番はでたらめです。だけど結果は順番に返ってきます。
これは、直感に反しいると思いませんか?
つまりはソートで言う、安定性がないことになります。普通に言えば要求順番と対応しない
ここで動作を確認するため、テストしてみました。
TABLE:test
id_tb:int (primary key)
id:int
test:char
以上の設定にして以下のようにデータを挿入しました。

+-------+----+------+
| id_tb | id | test |
+-------+----+------+
| 1 | 5 | test |
| 2 | 4 | test |
| 3 | 3 | test |
| 4 | 5 | test |
| 5 | 6 | test |
| 6 | 7 | test |
| 7 | 8 | test |
| 8 | 9 | test |
| 9 | 10 | test |
| 10 | 1 | test |
+-------+----+------+


予想としては、プライマリキーの順番で返答すると思ったので、以下のコマンドを実行しました。

mysql> select * from test where id in(1,2,3);
+-------+----+------+
| id_tb | id | test |
+-------+----+------+
| 3 | 3 | test |
| 4 | 2 | test |
| 10 | 1 | test |
+-------+----+------+
3 rows in set (0.00 sec)


プライマリキーのid_tb順になっています。
そこでプライマリキーを条件に使用します。

mysql> select * from test where id_tb in(1,2,3);
+-------+----+------+
| id_tb | id | test |
+-------+----+------+
| 1 | 5 | test |
| 2 | 4 | test |
| 3 | 3 | test |
+-------+----+------+
3 rows in set (0.00 sec)


id_tb順に返答しています。
そこでid_tbで条件をでたらめにします。

mysql> select * from test where id_tb in(5,2,3);
+-------+----+------+
| id_tb | id | test |
+-------+----+------+
| 2 | 4 | test |
| 3 | 3 | test |
| 5 | 6 | test |
+-------+----+------+
3 rows in set (0.00 sec)


順番は昇順になっています。
応答の早さを出すためなのでしょうが、ちょっと気になります。
プログラムによっては順番が大事になりますから気にしないといけませんね。
でも、指定できる方法あるのかな?
条件
where id in(4,2,5,3,1)
結果:
4・・・
2・・・
5・・・
3・・・
1・・・
というように。
スポンサーサイト
タグ :
≪ トップページへこのページの先頭へ  ≫
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。