Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL数据库优化和性能:2个表还是3个表?_Mysql_Performance_Foreign Keys_Innodb_Split - Fatal编程技术网

MySQL数据库优化和性能:2个表还是3个表?

MySQL数据库优化和性能:2个表还是3个表?,mysql,performance,foreign-keys,innodb,split,Mysql,Performance,Foreign Keys,Innodb,Split,以下是两张表: 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

以下是两张表:

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;
数据库中有更多的表(因此专家对我的问题的回答可能会因此不同)。 我是否应该将表订单拆分为两个表以提高性能? 您可以看到,表orders包含orderid、memberid和有关orders的更多信息,这些信息可能位于第三个单独的表中。拆分表顺序以便表#2包含orderid和memberid,而第三个表包含orderid、Time、info1和info2,这有意义吗

在大多数情况下,当查询通过orderid选择信息时,它还通过检查“WHERE memberid='abcde'”来双重检查信息是否适合适当的用户。因此,只有一个用户可以查看其订单中的信息,但其他用户无法查看。因此,我希望在同一个表orders中保留几个额外的列Time、info1、info2(以及更多关于顺序的列)是可以的(否则我必须在大多数情况下使用JOIN-in查询来双重检查memberid,尽管表被拆分,但查询变得更加复杂). 什么对性能最好:使用更简单的查询拆分表

顺便问一下,我是否根据性能规则和常识正确创建了这两个表(我问的是主键和外键)? 您是否建议使用INNODB而不是MYISAM?如果是,我是否应该对数据库中的所有表使用ENGINE=INNODB而不是ENGINE=MYISAM


多谢各位

InnoDB是MySQL最先进的引擎,也是默认的引擎。每次都使用它,除非你有充分的理由在特殊情况下不使用InnoDB

不要因为性能原因而破坏表布局。很可能还有其他方法来解决性能问题-当你遇到一个


我有一些理由认为这是有意义的,例如,如果您需要某个只适用于MyISAM引擎的专栏。在这里,拆分一个表以使用所需的全文索引分隔列是有意义的。

不,您不应该将成员id放在单独的表中。
memberid
VARCHAR(20)not NULL(主键),这是指全文索引吗?这是否意味着MyISAM是一个选择,因为这两个表都是如此?非常感谢。其余的都放在我的桌子上好看吗?谢谢。不,你应该同时使用InnoDB。对于全文索引,我将添加一个链接。