Вот две таблицы:
CREATE TABLE `mydatabase`.`members` (
`memberid` VARCHAR( 20 ) NOT NULL ,
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY (memberid)
) ENGINE = MYISAM ;
CREATE TABLE `mydatabase`.`orders` (
`orderid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`memberid` VARCHAR( 20 ),
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`info1` VARCHAR( 3200 ) NULL ,
`info2` DECIMAL (6,2) NULL ,
PRIMARY KEY (orderid) ,
FOREIGN KEY (memberid) REFERENCES members(memberid)
) ENGINE = MYISAM;
В БД больше таблиц (поэтому ответ на мой вопрос от экспертов, возможно, может быть иным).
Должен ли я разделить заказы на две таблицы, чтобы повысить производительность?
Вы видите, что таблицы заказов содержат orderid, memberid и некоторую дополнительную информацию о заказах, которая может быть в третьей отдельной таблице. Имеет ли смысл разделять порядок таблиц, чтобы таблица №2 содержала orderid и memberid, а третья таблица содержала orderid, Time, info1 и info2?
В большинстве случаев, когда запрос выбирает информацию с помощью orderid , он также перепроверяет эту информацию для соответствующего пользователя, проверяя " WHERE memberid = 'abcde' ". Таким образом, только 1 пользователь может видеть информацию из своего заказа, но никто другой. В результате я надеюсь, что сохранение нескольких дополнительных столбцов Time, info1, info2 (и еще нескольких столбцов о заказе) в той же таблице orders в порядке (иначе я должен использовать JOIN в большинстве случаев в большинстве случаев двойная проверка memberid выполняется чаще, и запросы становятся более сложными, хотя таблицы разбиты). Что лучше для производительности: разбить эти таблицы -vs-, используя более простые запросы?
Кстати, я правильно создаю эти 2 таблицы в соответствии с изменениями производительности и здравым смыслом (я спрашиваю о первичных и внешних ключах)?
Вы рекомендуете использовать INNODB вместо MYISAM? Если да, я должен использовать ENGINE = INNODB вместо ENGINE = MYISAM для ВСЕХ таблиц в БД?
Спасибо.