gpt4 book ai didi

使用关系与不分配关系的 MYSQL 性能

转载 作者:行者123 更新时间:2023-12-02 02:04:55 25 4
gpt4 key购买 nike

我有一个相当大的数据库,100 多个表。数据库的设计是传统的关系型数据库。我在与外键关联的表中有主键。但是,我并没有在实际的mysql dba 中建立任何关系。我使用 PHP 访问网站的数据,所有查询都将通过将 ON 设置为主键 = 外键的连接语句连接表。这种关系的学问确实是在我的脑子,事实上,我用一个很简单的命名约定。所有的主键都是以 PK 结尾的表名,即 tablenamePK,所有外键都是以 ID 结尾的 tablename,即 tablenameID。在创建供 PHP 运行的 SQL 时,很容易看出什么是主键,什么是外键。也就是说,我一直在争论是否应该在我的 MySQL DBA 中创建这些关系。这样做会提高性能吗?直到最近,性能才成为一个大问题,现在我希望在考虑升级硬件之前尽可能提高效率。

最佳答案

外键不会通过在“FK”列上创建普通索引来提高性能。也就是说,为了性能,您不一定需要约束。

外键约束旨在防止数据异常。

回复您的评论:

没错,为具有 PRIMARY KEY、UNIQUE KEY 或 FOREIGN KEY 约束的列隐式创建了索引。

索引是否会带来好处与表无关,即使它们具有引用其他表的列。它与您运行的查询有关。

例如:

CREATE TABLE Departments (ID INT PRIMARY KEY, name VARCHAR(10));

CREATE TABLE Employees (ID INT PRIMARY KEY, name VARCHAR(10), DeptID INT NOT NULL);

显然这些表是相关的,但我们没有定义索引或外键约束。

在Employees.DeptID 上的索引将有助于该查询返回培训部门的所有成员。查询首先按名称查找部门,然后使用索引查找相应的员工。
SELECT ... FROM Departments d JOIN Employees e ON d.ID = e.DeptID  
WHERE d.name = 'training';

但是该索引对于返回特定员工的部门名称的查询没有任何作用。该查询首先按姓名查找员工,然后使用它按主键 id 查找相应的部门。
SELECT ... FROM Departments d JOIN Employees e ON d.ID = e.DeptID  
WHERE e.name = 'Bill';

关于使用关系与不分配关系的 MYSQL 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15486099/

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