p_ooya
چهارشنبه 04 شهریور 1388, 22:45 عصر
سلام به همه.
دو جدول زیر را در نظر بگیرید :
CREATE TABLE `tm`.`archive` (
`serial` char(14) collate utf8_persian_ci NOT NULL,
`archive_number` tinyint(3) unsigned NOT NULL,
`date_f` char(10) collate utf8_persian_ci default NULL,
`date_p` char(10) collate utf8_persian_ci NOT NULL,
`date_s` char(10) collate utf8_persian_ci default NULL,
`state` tinyint(3) unsigned NOT NULL,
`s_id` int(10) unsigned default NULL,
`i_id` int(10) unsigned default NULL,
PRIMARY KEY (`serial`),
KEY `FK_archive_1` (`s_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
و
CREATE TABLE `tm`.`arctoarc` (
`serial` char(14) COLLATE utf8_persian_ci NOT NULL,
`arc_no1` tinyint(3) unsigned NOT NULL,
`date1` char(10) COLLATE utf8_persian_ci NOT NULL,
`arc_no2` tinyint(3) unsigned NOT NULL,
`date2` char(10) COLLATE utf8_persian_ci NOT NULL,
`arc_no3` tinyint(3) unsigned NOT NULL,
`date3` char(10) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`serial`),
CONSTRAINT `FK_arcTOarc_1` FOREIGN KEY (`serial`) REFERENCES `archive` (`serial`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
همونطور که می بینید این دو جدول از طریق فیلد سریال با هم یه ارتباط یک به یک (یا صفر) دارند. برای اکثر سریال ها، سطر های جدول دوم null هستند و شاید 5 درصد سریال ها در این جدول دوم سطر خواهند داشت. جدول اول ما در نهایت 1 میلیون رکورد خواهد داشت و همونطور که گفتم 5 درصد این رکوردها در جدول دوم نماینده دارند. سوال اینجاست که از اونجایی که روی این دو جدول پرس و جو زیاد انجام میشه و پرس و جو هم همگی باید روی Join این دو جدول انجام بشه، با توجه به حجم 1 میلیونی داده، بهتر نیست که دو جدول رو یکی کنم و این حجم داده null رو قبول کنم اما پرس و جو ها رو بدون الحاق انجام بدم؟
سپاس.
دو جدول زیر را در نظر بگیرید :
CREATE TABLE `tm`.`archive` (
`serial` char(14) collate utf8_persian_ci NOT NULL,
`archive_number` tinyint(3) unsigned NOT NULL,
`date_f` char(10) collate utf8_persian_ci default NULL,
`date_p` char(10) collate utf8_persian_ci NOT NULL,
`date_s` char(10) collate utf8_persian_ci default NULL,
`state` tinyint(3) unsigned NOT NULL,
`s_id` int(10) unsigned default NULL,
`i_id` int(10) unsigned default NULL,
PRIMARY KEY (`serial`),
KEY `FK_archive_1` (`s_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
و
CREATE TABLE `tm`.`arctoarc` (
`serial` char(14) COLLATE utf8_persian_ci NOT NULL,
`arc_no1` tinyint(3) unsigned NOT NULL,
`date1` char(10) COLLATE utf8_persian_ci NOT NULL,
`arc_no2` tinyint(3) unsigned NOT NULL,
`date2` char(10) COLLATE utf8_persian_ci NOT NULL,
`arc_no3` tinyint(3) unsigned NOT NULL,
`date3` char(10) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`serial`),
CONSTRAINT `FK_arcTOarc_1` FOREIGN KEY (`serial`) REFERENCES `archive` (`serial`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
همونطور که می بینید این دو جدول از طریق فیلد سریال با هم یه ارتباط یک به یک (یا صفر) دارند. برای اکثر سریال ها، سطر های جدول دوم null هستند و شاید 5 درصد سریال ها در این جدول دوم سطر خواهند داشت. جدول اول ما در نهایت 1 میلیون رکورد خواهد داشت و همونطور که گفتم 5 درصد این رکوردها در جدول دوم نماینده دارند. سوال اینجاست که از اونجایی که روی این دو جدول پرس و جو زیاد انجام میشه و پرس و جو هم همگی باید روی Join این دو جدول انجام بشه، با توجه به حجم 1 میلیونی داده، بهتر نیست که دو جدول رو یکی کنم و این حجم داده null رو قبول کنم اما پرس و جو ها رو بدون الحاق انجام بدم؟
سپاس.