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]