1

テーブルに主キーを追加した後、非常に奇妙な動作を見つけました。キーを作成する前は、テーブルには6,672行ありました。キーを作成した後、103がありました。ただし、キーが空のテーブルに作成され、同じデータが追加された場合、6,672行になります。そして、はい、主キーを作成するために使用されるすべての値は/一意でした。私が実行したコードは以下のとおりです。

テーブルは「WC」です。

CREATE TABLE `wc` (
  `gvkey` bigint(20) NOT NULL,
  `date_fin` date NOT NULL,
  `wc` double DEFAULT NULL,
  `wc_less_debt_st` double DEFAULT NULL,
  `curr_liab_x` double DEFAULT NULL,
  `wc_adj` double DEFAULT NULL,
  `wc_adj_v2` double DEFAULT NULL,
  PRIMARY KEY (`gvkey`,`date_fin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

テーブルを作成した後、次のコードが実行されました。

ALTER TABLE wc
DROP PRIMARY KEY;

DELETE FROM wc;

INSERT INTO wc (date_fin, gvkey)
SELECT DISTINCT u.udate, g.gvkey 
FROM gvkey as g INNER JOIN udate as u
WHERE g.flag = TRUE;

ALTER TABLE wc
ADD PRIMARY KEY `gvkey-date` (gvkey asc, date_fin asc);

テーブルのサイズをテストするには:

SELECT COUNT(gvkey) FROM (SELECT gvkey FROM wc GROUP BY gvkey) AS x;

主キーを追加する前にテストを実行すると、結果は6,672になります。キーを作成した後に実行すると、結果は103になります。次に呼び出しを移動すると

ALTER TABLE wc
    ADD PRIMARY KEY `gvkey-date` (gvkey asc, date_fin asc);

直後にdelete from wc実行すると、INSERT正常に動作し、テーブルに6,672行が表示されます。

以前、すでにデータが入力されているテーブルに主キーを追加する際にいくつかの問題が発生しましたが、これほど明白なことはありませんでした。

これは既知の動作であり、入力されたテーブルに主キーを追加することは悪い習慣ですか?この順序で実行する(入力してからPKを作成する)動機は、主キーがないと挿入がより高速に実行されると思ったためです。このテーブルには関係ありませんが、300万を超えるレコードを持ついくつかのテーブルを使用しています。私はデータベース管理にかなり慣れていないので、提案や説明をいただければ幸いです。私はこれについて他のどこにも言及していません。

ありがとう、

4

0 に答える 0