[前][次][番号順一覧][スレッド一覧]

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]