テーブルに主キーを追加した後、非常に奇妙な動作を見つけました。キーを作成する前は、テーブルには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万を超えるレコードを持ついくつかのテーブルを使用しています。私はデータベース管理にかなり慣れていないので、提案や説明をいただければ幸いです。私はこれについて他のどこにも言及していません。
ありがとう、