gpt4 book ai didi

MySQL数据库优化和性能: 2 tables or 3 tables?

转载 作者:行者123 更新时间:2023-11-29 14:40:17 27 4
gpt4 key购买 nike

这里有两个表:

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;

数据库中有更多的表(因此专家对我的问题的答案可能因此而不同)。我是否应该将表订单拆分为 2 个表以提高性能?您会看到订单表包含 orderid、memberid 以及有关订单的更多信息,这些信息可能位于第三个单独的表中。拆分表 order 是否有意义,以便表 #2 包含 orderid 和 memberid,第三个表包含 orderid、Time、info1 和 info2?

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

顺便说一句,我是否根据性能角色和常识正确创建了这两个表(我问的是主键和外键)?你推荐使用 INNODB 而不是 MYISAM 吗?如果是,我应该对数据库中的所有表使用 ENGINE = INNODB 而不是 ENGINE = MYISAM 吗?

谢谢。

最佳答案

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

请勿出于性能原因破坏表格布局。很可能还有其他方法来解决性能问题 - 当您遇到一种方法时......

出于某些原因,我可以想到它的意义所在,即如果您需要 FULLTEXT-Index某些列仅适用于 MyISAM 引擎。在这里,拆分表以分隔具有所需全文索引的列是有意义的。

关于MySQL数据库优化和性能: 2 tables or 3 tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com