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

mysql:8890

From: KAWAJI Shinya <KAWAJI Shinya <kawaji@xxxxxxxxxx>>
Date: Wed, 03 Mar 2004 08:47:56 +0900
Subject: [mysql 08890] Re: 整数フィールドの次の空きを探す sql は

かわじ、です。


> >  わたしも、似たような方向では考えてみているのですが、
> > (上のSQL文は、下記のようでしょうか? t_seq が跳びの
> > ないシーケンシャルなファイルとすると、以下のように
> > なると思うのですが、シーケンシャルテーブルの意味が
> > 私の了解と違うのかもしれません。)
> 
>  かわじさんのやり方は、テーブルt_seqに全ての数をあらかじめ入れておくも
> ので、抜けを捜す段階でt_seqを作り直す、というものでは無いと思いますよ。

いや、これは単に私の書いた SQL が間違っていただけの話だと思います。
すみません。


>  [mysql 08885]の(2)の方法は、ぼくの周辺では「スロット」と呼ばれるやり方
> です。一般に何と呼ばれているのかは知りません。かわじさんのleft joinの方
> 法よりも (検索と更新で)速度的に有利と考えますが、テーブル設計を失敗する
> と一層のストレージの無駄が発生しかねない方法ですね。

多分 (2) と同じ話だと思いますが、同じデータベース内に「フラグ」になる
フィールドを用意しておいて、「削除するときは(行を削除するのではなく)
フラグを変化させるだけ」というやり方もありますね。

 1. 今の時点で、テーブル内にあるデータはすべてフラグをオンにする
 2. 抜けのある数をすべてスクリプトなどで調べ上げて、その数について、
    フラグをすべてオフにした状態で適当なデータを挿入する
 3. 通常の検索や集計などはフラグがオンのもののみ対象とする
 4. データの削除はフラグをオフにするのみ(削除はしない)
 5. データの挿入は、まずフラグがオフの行を調べて、見つかればそれを
    更新することにする。無ければ挿入する。

3. のために多くの SQL文を変更しなければならないことと、5. をアトミックに
やらなければならないことが課題です。


しかし、一番いいのは「番号を使い切ることに意味は無い」と言い張ることで
しょうね。



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

      8880 2004-03-02 15:16 [柴垣 顕郎 <akiro@xx] 整数フィールドの次の空きを探す sql は   
      8882 2004-03-02 15:59 ┣[KAWAJI Shinya <kawaj]                                       
      8883 2004-03-02 16:04 ┃┗[KAWAJI Shinya <kawaj]                                     
      8888 2004-03-02 20:50 ┃ ┗[柴垣 <akiro@xxxxxxxx]                                   
      8889 2004-03-02 23:40 ┃  ┗[ML account <ml@xxxxx]                                 
->    8890 2004-03-03 08:47 ┃   ┗[KAWAJI Shinya <kawaj]                               
      8894 2004-03-03 09:28 ┃    ┣[柴垣 <akiro@xxxxxxxx]                             
      8899 2004-03-03 12:54 ┃    ┃┗[Seiji Uramoto <uramo]                           
      8895 2004-03-03 10:11 ┃    ┣[ML account <ml@xxxxx]                             
      8898 2004-03-03 12:35 ┃    ┗[班石悦夫 <madara@xxx]                             
      8900 2004-03-03 14:44 ┃     ┗[ML account <ml@xxxxx]                           
      8885 2004-03-02 16:19 ┣[ML account <ml@xxxxx]                                       
      8886 2004-03-02 18:48 ┗[班石悦夫 <madara@xxx]