我想检查JOINS的顺序在SQL查询中对于运行时和效率是否重要。
我正在使用PostgreSQL,为了检查,我使用了来自MYSQL(https://downloads.mysql.com/docs/world.sql.zip)的示例world db,并编写了以下两个语句:
查询1:
InRightPosition
查询2:
public class PanelManager : MonoBehaviour
{
List slots = new List();
bool allInRightPosition
void Start()
{
for (int i = 0; i < 9; i++)
slots.Add(false);
foreach(Transform child in transform)
{
int index = 0;
do
{
index = Random.Range(0, 9);
} while (slots[index]);
slots[index] = true;
child.localPosition = new Vector3(index/3, index%3-2,0) /* *3 */;
}
}
void Update()
{
foreach (Transform child in transform)
{
if (child.GetComponent<PanelMove>() != null && child.GetComponent<PanelMove>().InRightPosition == true)
{
allInRightPosition = true;
print(allInRightPosition);
}
else if (child.GetComponent<PanelMove>() != null &&
child.GetComponent<PanelMove>().InRightPosition == false)
{
allInRightPosition = false;
break;
}
}
}
EXPLAIN ANALYSE SELECT * FROM countrylanguage
JOIN city ON city.countrycode = countrylanguage.countrycode
JOIN country c ON city.countrycode = c.code
EXPLAIN ANALYSE SELECT * FROM city
JOIN country c ON c.code = city.countrycode
JOIN countrylanguage c2 on c.code = c2.countrycode
估计的成本和行不同,并且最后的哈希条件不同。这是否意味着查询计划程序未针对两个查询执行相同的操作,还是我走错了路?
感谢您的帮助!
答案 0 :(得分:2)
问题不是join
的顺序,而是join
条件不同-引用不同的表。
在第一个查询中,您正在使用countrylanguage
中的国家/地区代码加入city
。在第二个中,您正在使用country
中的国家/地区代码。
对于内部连接,这不应影响最终结果。但是,它显然会影响优化器如何考虑不同的路径。
答案 1 :(得分:2)