mysql:11278
From: Hirokazu Aoyama <Hirokazu Aoyama <aoyama@xxxxxxxxxx>>
Date: Sat, 26 Mar 2005 19:35:52 +0900
Subject: [mysql 11278] Re: selectで
こんにちは、青山です。 > KK@IBです > > それで、物理ソートですが、その順序で > レコードをスムーズに読み出したいときに > 物理ソートをしておいて、順(シーケンシャル)アクセス > したほうがトータルコストがかからない場合が > あります。 > > そういう時に使います。 > そうでないときは、使わないでしょうね。 ここについてですが、もしかすると、物理ソートをする、というのは、 ・SELECT等のクエリー発行から終了までの間でDBがそういうことを行う という話では全然なくて、 例えば ・新しく別のPRIMARY KEYを定義したテーブルを作り、データを登録する ということにより「ソートする」という意味になるでしょうか? それであれば話はわかります。 大量データの解析を行いたいような場合は、そういうことをする方が 効率が良いでしょうし。 # トランザクション系のシステムでそういうことを行うことはまず # ないとは思いますけど。 > > また、全件検索する場合でも、Bツリーのリーフを順に読めばそのまま > > PRIMARY KEYの順になっているので、シーケンシャルアクセスをすれば > > PRIMARY KEYでソート済みデータが得られることになります。 > > PRIMARY KEYでデータを特定する場合は、ですね。 確かに条件の補足が足りなかったのですが、WHERE句はあってもなくてもよくて、 ORDER BYとかGROUP BYがない場合は、ということになると思います。 > WHERE句が使われていて、データが複数選択された時、 > ORDER BY がかかっている状態では、 > その場での順序づけが必要でしょう。 結果セットの最初の一行をDBが返す前に、ORDER BYの順に従って 内部的にマーキングする必要があるとは思いますが、 「必要でしょう」の言い方がよくわかりませんでした。 だから、何がどうなる、または、何をどうする、ということについて もう少し具体的に説明していただけないでしょうか? > 「そのレコードを指すインデックス」とは、レコードのID(となっているもの)のことです。 > 「インデックスソート」の「インデックス」です。 > 青山さんのおっしゃっている「インデックス」は、そういうID的なものが、 > 並べられ終わった記録、ファイルのことですね。これもインデックスと呼ばれるので レコードのIDはデータベース用語としては「キー」でしょう。 特に、「レコードのID」という言い方をする場合は、それはPRIMARY KEYを 指すか、もしくはROWIDのことを指すことになると思います。 データベースで「インデックス」と言えば、ファイルに格納された インデックスのことを指すと思うのですが。 もしそれ以外の意味で使いたい場合は、予めそう宣言していただかないと 他の人には意味が通じないと思います。 > > MySQLの現在の機能では、物理的に並べ替えたい場合は、一旦データを > > ダンプしてからテーブルを削除し、再度テーブルを作り直す必要が > > あるようです。 > > # Oracleとかだと運用しながらテーブル再構築する機能があったりします。 > > MySQLがどうかは別とすると、(すみません、考えていなかったのです。) > DBの機能としては、物理ソート機能があるのが普通ではないでしょうか? > そうでもないのでしょうかねぇ。 ちょっと調べて見たのですが、Oracle 10gでも、結局のところ PRIMARY KEYを変更して物理的に並びを変えることはできないみたいですね。 擬似PRIMARY KEYを定義して、新しい表のように見せかけることができる だけの話でした。 # うーん。ちゃんと調べないと・・。 もちろん、フラグメント化を解消する、という意味で物理的に並べかえる機能は MySQLもOracleも持っています。 MySQLの場合は ALTER TABLE tablename TYPE=InnoDB とかでテーブル再構築できます。 -- Hirokazu Aoyama <aoyama@xxxxxxxxxx>
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]