我在与我的MySQL声明实际问题的问题,我需要加入几桌一起,从另一个表的平均值的对它们进行查询和秩序。这是我有...与MySQL查询(效率)
SELECT
ROUND(avg(re.rating), 1)AS avg_rating,
s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
GROUP BY staff_id
ORDER BY avg_rating DESC
现在我相信这个工作,虽然我得到这个错误“SELECT将审查比使用max_join_size行以上;检查你的WHERE和使用SET SQL_BIG_SELECTS = 1或SET SQL_MAX_JOIN_SIZE = #如果SELECT是好的“。
我想这意味着我有太多的连接和因为它是托管共享它不会允许大型查询运行,我不知道。
我想知道的是什么错误的手段(我用Google搜索,但我不明白的答案),我怎么可以也许使我的查询更高效的工作轮呢?
任何帮助,将不胜感激。由于
编辑:
我需要加入的原因是这样我就可以查询基于像这样的搜索功能的表...
SELECT
ROUND(avg(re.rating), 1)AS avg_rating
, s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
WHERE s.full_name LIKE '%'
AND s.drive = '1'
AND sh.home_id = '3'
AND sh.can_work = '1'
AND sp.position_id = '3'
AND sp.can_work = '1'
GROUP BY staff_id
ORDER BY avg_rating DESC
EDIT 2
这是我的解释结果。另外我对MYSQL不太好,我怎么设置外键?
ID SELECT_TYPE表型possible_keys键key_len REF行额外
1 SIMPLE UA ALL NULL NULL NULL NULL 14使用临时;使用文件排序
1 SIMPLE重新ALL NULL NULL NULL NULL 50使用其中;使用加入缓冲区
1 SIMPLE sp ALL NULL NULL NULL NULL 84使用where;使用加入缓冲区
1 SIMPLE sh ALL NULL NULL NULL NULL 126使用where;使用连接缓冲
1 SIMPLE小号eq_ref PRIMARY PRIMARY 4 web106-prestwick.ua.staff_id 1名
编辑3:谢谢LC,这是我的外键,它们没有设置正确。问题分类
为什么所有的连接?您的选择陈述仅引用员工和可靠性表。 – OTTA
你在sql中究竟想要什么?你可以给我们的表格结构,也许我们可以削减连接。 –
MAX_JOIN_SIZE是一个MYSQL设置,它限制了您的连接语句可以返回的记录数。这可能是由您的共享主机提供商出于各种原因而设置的。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_join_size –