MySQL语句的性能和优化

时间:2016-12-07 11:58:38

标签: php mysql sql

我需要您提供有关遍历和返回数据库值的最佳方法的建议(如下所示)。数据库的结构由另一个应用程序设置。

在这种情况下,系统当前如何返回ID = 6的用户的值:

查找项目实例和项目模块(1和培训)并返回行ID。使用此行ID,在表2中查找相应的itemid和userid。

grade_grades

Table1

grade_items

Table2

当前SQL /函数:

功能1 {SELECT ID FROM grade_items WHERE itemmodule =' training'和iteminstance =' 1' }(返回ID)

功能2 {使用返回的ID,运行以下内容:SELECT * FROM grade_grades WHERE itemid =' 4' AND userid =' 6'}(返回finalgrade)

是否有更简单的方法在一个MYSQL语句中获取所有这些而不是运行两个查询? (我之所以要问的原因是因为每个查询都有可能会运行100到10000次 - 具体取决于列表中的用户数量。目前 - 如果我运行服务器,服务器会停止大约15分钟查询所有记录(没有pagenation来计算总数)

2 个答案:

答案 0 :(得分:1)

加入他们:

SELECT g.*
FROM grade_items g
JOIN grade_grades g2
 ON(g2.id = g.itemid)
WHERE g2.itemmodule = 'training' and g2.iteminstance = '1'

或者,使用IN()

SELECT g.*
FROM grade_items g
WHERE g.itemid IN(SELECT g2.id FROM grade_grades  g2
                  WHERE g2.itemmodule = 'training'
                    and g2.iteminstance = '1')

答案 1 :(得分:0)

使用 JOIN 组合来自两个或多个表的行

 SELECT * 
 FROM grade_grades 
 JOIN grade_items ON grade_grades.id = grade_items.itemid
 WHERE itemid = 4