1

これが私が現在持っているものです:

アーカイブ テーブル (2008 ~ 2011 年ごとに 1 つ) と、2012 年に新たに作成された 4 つのテーブル (四半期ごと)。新しいテーブルを含め、これらのテーブルはすべて同じ構造とキーを持っています。これらの命名規則は ARCHIVE_PLAYS です。次に、現在のデータ用の「ライブ」テーブル (PLAYS と呼ばれる) を作成します。レポートを実行できるように、すべてのテーブルを組み合わせた結合テーブルがあります。以前はなかった問題は、このマージされたテーブルに重複が表示されていることです。それらは同じ主キーを持っているので、そうではないはずですよね? 以前はこの問題がなかったので、作成したばかりの新しいテーブルと関係があるに違いありません。

構造:

**COMPANY**
      COMPANY.MERGED_PLAYS
      COMPANY.ARCHIVE_PLAYS_2008
      COMPANY.ARCHIVE_PLAYS_2009
      COMPANY.ARCHIVE_PLAYS_2010
      COMPANY.ARCHIVE_PLAYS_2011
      COMPANY.ARCHIVE_PLAYS_2012Q1
      COMPANY.ARCHIVE_PLAYS_2012Q2
      COMPANY.ARCHIVE_PLAYS_2012Q3
      COMPANY.ARCHIVE_PLAYS_2012Q4

**COMPANY2**
      COMPANY2.PLAYS

Merged_Plays を除く各テーブルには、次の Create があります。

CREATE TABLE `ARCHIVE_PLAYS_2011` (
`ENTRY_ID` BIGINT(20) NOT NULL,
`NODE_ID` VARCHAR(48) NOT NULL,
`HW_ID` VARBINARY(64) NOT NULL,
`LOG_DAY` DATE NOT NULL,
`ROW_NUMBER` INT(11) NOT NULL,
`NODE_NAME` VARCHAR(128) NOT NULL,
`FILE_NAME` VARCHAR(1024) NOT NULL,
`PRESENTATION_NAME` VARCHAR(1024) NULL DEFAULT NULL,
`SMIL_SEQUENCE_ID` VARCHAR(256) NULL DEFAULT NULL,
`SMIL_CONTENT_ID` VARCHAR(256) NULL DEFAULT NULL,
`PLAY_TIME_MS` BIGINT(20) NOT NULL,
`PLAY_TIME` TIME NOT NULL,
`STATUS_CODE` VARCHAR(48) NULL DEFAULT NULL,
`NUM_SCREENS_CONNECTED_AND_ON` INT(11) NULL DEFAULT NULL,
`NUM_SPEAKERS_CONNECTED_AND_ON` INT(11) NULL DEFAULT NULL,
`SCREEN_LAYOUT_MATCHES` CHAR(1) NULL DEFAULT NULL,
`ENTRY_PROCESSED` CHAR(1) NULL DEFAULT NULL,
`FILE_PATH` VARCHAR(1024) NULL DEFAULT NULL,
PRIMARY KEY (`NODE_ID`, `LOG_DAY`, `ROW_NUMBER`),
INDEX `PLAYLOG_ENTRY_ID` (`ENTRY_ID`),
INDEX `PLAYLOG_LOG_DAY` (`LOG_DAY`),
INDEX `PLAYLOG_LOG_DAY_PLAY_TIME` (`LOG_DAY`, `PLAY_TIME`),
INDEX `PLAYLOG_FILE_NAME` (`FILE_NAME`(600)),
INDEX `PLAYLOG_NODE_NAME` (`NODE_NAME`),
INDEX `PLAYLOG_FILE_NAME_NODE_NAME` (`FILE_NAME`(600), `NODE_NAME`),
INDEX `PLAYLOG_ENTRY_ID_PROCESSED` (`ENTRY_ID`, `ENTRY_PROCESSED`)
  )
    COLLATE='latin1_swedish_ci'
    ENGINE=MyISAM;
4

1 に答える 1

1

主キーは、1 つのテーブル内の一意のデータのみを保証します。複数のテーブルにわたって重複するレコードが必要です。ライブ テーブルから 2012 年のデータをすべて削除したことを確認します。四半期テーブル間に重複がないことを確認してください。

また、レコードが 100% 重複している場合、(UNION ALL ではなく) すべてのテーブル間で UNION を実行すると、一意の結果が得られますが、クエリのパフォーマンスが低下します。

于 2013-01-08T18:33:07.697 に答える