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

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]