mysql:11281
From: "KKuji_Y2" <"KKuji_Y2" <kkuji@xxxxxxxxxx>>
Date: Sun, 27 Mar 2005 05:04:37 +0900
Subject: [mysql 11281] Re: selectで
KK@IBです 多少説明する責任があるようなので... >> WHERE句が使われていて、データが複数選択された時、 >> ORDER BY がかかっている状態では、 >> その場での順序づけが必要でしょう。 > > 結果セットの最初の一行をDBが返す前に、ORDER BYの順に従って > 内部的にマーキングする必要があるとは思いますが、 > 「必要でしょう」の言い方がよくわかりませんでした。 > > だから、何がどうなる、または、何をどうする、ということについて > もう少し具体的に説明していただけないでしょうか? 結果セットのメンバーとなるレコードが複数ある時に それを、ORDER BYで指定されたものの順序に並べるわけですが、 そこでぴったり使えるような、前もって張られたキーがあるのか、 また、そのまま使えるかどうか、 それは、決まっている話ではないのではないかと思います。 ですから、DBMS内部の処理としては、 中で指定されたフィールドの組み合わせなどで、そこであらためてソート めいたことをしているのではないでしょうか? 何らか、順序づけの情報(インデックスの存在など)があれば、当然 それを活用するでしょうが。 > > >> 「そのレコードを指すインデックス」とは、レコードのID(となっているもの)のことです。 >> 「インデックスソート」の「インデックス」です。 >> 青山さんのおっしゃっている「インデックス」は、そういうID的なものが、 >> 並べられ終わった記録、ファイルのことですね。これもインデックスと呼ばれるので > > レコードのIDはデータベース用語としては「キー」でしょう。 キーには重複するものもあるので、その場合は、 レコードをIdentifyできる「ID」にはならないかと思います。 (たとえば、郵便番号をキーに指定した場合など。) 何か(ここではレコード)をUniqueに指定できるものがIDと呼ばれるわけですから。 > > 特に、「レコードのID」という言い方をする場合は、それはPRIMARY KEYを > 指すか、もしくはROWIDのことを指すことになると思います。 Oracleで言うRawIDをこれを書いたときは意識していました。 いずれにせよ、DBMSにとってはレコードを同定できる何らかの識別子が必要ですが、 それは必ずしもユーザーが明示的にはったキーのどれかとは限りません。 ただ、DBの用語としては、 > 特に、「レコードのID」という言い方をする場合は、それはPRIMARY KEYを > 指すか、もしくはROWIDのことを指すことになると思います。 そうですね。おっしゃるとおりです。 そして、ここはMySQLのMLなので、青山さんのおっしゃるとおりです。 つい、そういうことを忘れて、いろいろ書いてしまった私が迂闊でした。 > > データベースで「インデックス」と言えば、ファイルに格納された > インデックスのことを指すと思うのですが。 > > もしそれ以外の意味で使いたい場合は、予めそう宣言していただかないと > 他の人には意味が通じないと思います。 > > >> > MySQLの現在の機能では、物理的に並べ替えたい場合は、一旦データを >> > ダンプしてからテーブルを削除し、再度テーブルを作り直す必要が >> > あるようです。 >> > # Oracleとかだと運用しながらテーブル再構築する機能があったりします。 >> >> MySQLがどうかは別とすると、(すみません、考えていなかったのです。) >> DBの機能としては、物理ソート機能があるのが普通ではないでしょうか? >> そうでもないのでしょうかねぇ。 > > ちょっと調べて見たのですが、Oracle 10gでも、結局のところ > PRIMARY KEYを変更して物理的に並びを変えることはできないみたいですね。 > 擬似PRIMARY KEYを定義して、新しい表のように見せかけることができる > だけの話でした。 > # うーん。ちゃんと調べないと・・。 そうですね。 最近は、DBMSとしては、物理的な姿をあまり意識させない様になっているようですね。 といっても、インデックスタイプを選択させている部分は、そうでもないかな。 > > もちろん、フラグメント化を解消する、という意味で物理的に並べかえる機能は > MySQLもOracleも持っています。 > > MySQLの場合は > ALTER TABLE tablename TYPE=InnoDB > とかでテーブル再構築できます。 こんなところでよろしいでしょうか? 蛇足ですが、 例のカーディナリティの問題は、昔、インデックスのシステムを いろいろ考えたときに、結構、どうすべきかな、と悩みました。 普段あまり考えていないことではないかと思いますが、 意識すべき問題ですね。
11272 2005-03-26 01:58 [<hiromitsu.narimasu_] Re: selectで 11274 2005-03-26 10:49 ┗[Hirokazu Aoyama <aoy] 11275 2005-03-26 12:56 ┣[Hirokazu Aoyama <aoy] 11276 2005-03-26 16:12 ┃┗[深海水草 <VYG01106@x] 11277 2005-03-26 17:21 ┗["KKuji_Y2" <kkuji@xx] 11278 2005-03-26 19:35 ┣[Hirokazu Aoyama <aoy] -> 11281 2005-03-27 05:04 ┃┗["KKuji_Y2" <kkuji@xx] 11280 2005-03-27 03:15 ┗[Hirokazu Aoyama <aoy]