在 SQL 中,FROM 子句指定要从中检索数据的表。FROM 子句的顺序对于查询性能至关重要,良好的语序可以显著提升查询速度。
嵌套式联接
嵌套式联接是最简单且最常见的 FROM 子句顺序。在这种情况下,第一个指定的表作为主表,随后的表与主表连接,形成嵌套结构。例如:
sql
SELECT *
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id
INNER JOIN products ON orders.product_id = products.id;
星形架构
星形架构是针对多维数据集优化的 FROM 子句顺序。中心表(事实表)放置在第一个,维度表(查找表)按维度顺序跟在后面。这种架构允许高效地对事实表进行聚合和过滤。例如:
sql
SELECT *
FROM sales_fact
LEFT JOIN customer_dim ON sales_fact.customer_id = customer_dim.id
LEFT JOIN product_dim ON sales_fact.product_id = product_dim.id
LEFT JOIN date_dim ON sales_fact.date_id = date_dim.id;
雪花架构
雪花架构是星形架构的扩展,其中维度表也相互连接。这种架构允许在多个维度上进行更复杂的查询。例如:
sql
SELECT *
FROM sales_fact
LEFT JOIN customer_dim ON sales_fact.customer_id = customer_dim.id
LEFT JOIN customer_geo_dim ON customer_dim.geo_id = customer_geo_dim.id
LEFT JOIN product_dim ON sales_fact.product_id = product_dim.id
LEFT JOIN date_dim ON sales_fact.date_id = date_dim.id;
选择最佳 FROM 语序
最佳的 FROM 语序取决于查询的类型和表之间的关系。对于嵌套式联接,主表应放在第一个。对于星形和雪花架构,事实表应放在第一个,维度表按相关性递减的顺序跟在后面。仔细考虑 FROM 子句的顺序可以显着提高 SQL 查询的性能。