如何避免多个连接以获得更好的性能?

时间:2016-08-16 07:38:01

标签: mysql sql join mariadb

我有5个表,并且都有依赖关系所以我已经编写了这个查询来获取数据并且它工作正常但性能很差所以你能提出一些概念吗?

SELECT  a.*,cg.*,c.*,qt.*,ct.* 
FROM MYB.choice_table ct 
RIGHT OUTER JOIN MYB.question_table qt ON ct.questionID = qt.questionID 
RIGHT OUTER JOIN MYB.category_table c ON  c.categoryID = qt.categoryID 
RIGHT OUTER JOIN MYB.categoryGroup_table cg ON cg.categoryGroupID=c.categoryGroupID 
RIGHT OUTER JOIN MYB.audit_table a ON a.auditID=cg.auditID 
WHERE a.auditID=123

2 个答案:

答案 0 :(得分:1)

我唯一能想到的就是索引你用于连接的所有数据。

您也不应该

Select *

尽量减少你需要的回报

子注释

查看你的查询,它将加入整个数据集,然后搜索你的where子句。

因此,假设a.123只有50个值,但所有表都有10000行数据。如果每行10000行的表格x将多少列返回搜索并获得50个值

,则表示您正在加入n个数量

答案 1 :(得分:1)

我建议您使用EXPLAIN查看执行计划。 请参阅http://dev.mysql.com/doc/refman/5.7/en/explain.html

此类执行计划将帮助您了解幕后发生的事情并确定潜在问题。联接计数本身并不会减慢速度。