mysql - 在 mysql 中连接 4 个或更多表的更快查询

标签 mysql

我在某处看到了这种从具有多个条件的多个表中进行选择的格式,并且我已经实现了很多年。我想知道的是,是否有任何方法可以让它更快。 查询背景:我正在从消息表 b/w student 和 tutors 中为学生在 jobs 表中发布的工作选择消息。 导师信息存储在tutorinfo表中,学生信息存储在studentinfo表中。

请同时说明这是什么类型的连接。有人告诉我这是交叉连接,但我不确定。直到最近我才知道加入,但从来没有必要。这种格式已经为我服务了一段时间。我不确定使用连接格式如何让它变得更好,如果有的话。

这是当前查询::

SELECT 
messages.* ,  
tutorinfo.id as tutor_id, 
jobs.student_id as student_id, jobs.job_title
from messages, tutorinfo, studentinfo, jobs where
messages.job_id= jobs.id and jobs.student_id = '3' and messages.thread_id = '2' and        messages.tutor_id = tutorinfo.id and messages.job_id = jobs.id and studentinfo.id=jobs.student_id 

最佳答案

这是以更现代的风格编写的 select 语句。在这种样式中,您可以看到连接(注意它们都是内部连接)。您可以看出它们是内部联接(在我们的两个查询中),因为联接的列是由相等的联接的。在使用交叉连接或外部连接的方法中,您需要特殊的格式(而不仅仅是 =),您使用特殊语法的“连接”格式。

SELECT m.*, 
       t.id as tutor_id, 
       j.student_id as student_id, j.job_title
from messages m
join jobs j on m.job_id = j.job_id
join studentinfo s on j.student_id = s.id
join tutorinfo t on m.tutor_id = t.id
where j.student_id = '3' and m.thread_id = '2' 

有一件事很清楚——studentinfo 未被使用,您可以将其删除。 除此之外,向所有用作连接的列添加索引,我没有看到太多优化方式。

SELECT m.*, 
       t.id as tutor_id, 
       j.student_id as student_id, j.job_title
from messages m
join jobs j on m.job_id = j.job_id
join tutorinfo t on m.tutor_id = t.id
where j.student_id = '3' and m.thread_id = '2' 

关于mysql - 在 mysql 中连接 4 个或更多表的更快查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387308/

相关文章:

php - 如何用字典数据库解析一个词/短语与 2 个词(在 PHP 中)

php - 如何在配置了 s2Member 的 WordPress 中获取所有 EOT 设置为从今天起两周后到期的成员?

mysql - 从 MySQL 数据库创建 CSV 并附加到 PHPMailer 电子邮件

mysql - 无法将 .sql 文件加载到 mysql mac 中

MySQL:两次使用同一个表创建新表

php - 如何使用php将一列的单行中的多个值添加到mysql中

php - MySQL 表 id 递增,尽管没有插入任何内容

mysql - 我可以在我的网站前面放一个缓存服务器吗?

python - 如何使用 Python 将带有引号和换行符的字符串插入到 sqlite 数据库中?

php - 为什么这个 SQL 语句失败?调用非对象上的成员函数bind_param()